사용자 지정 사용자 데이터베이스를 사용한 웹 API 토큰 인증
연결 클라이언트 (제가 만들고 제어 할 HTML5 / JS 클라이언트)를 인증하는 데 필요한 Web API 2.1 서비스를 개발 중입니다. 불행히도 사용자 정보 (사용자 이름, 암호 해시, 역할 및 훨씬 더 많은 정보)는 읽기 권한 만있는 기존 (SQL Server) 데이터베이스에 저장됩니다. 사용자 데이터베이스 테이블은 보안 프레임 워크에 대한 참조없이 5 ~ 6 년 전에 생성되었으므로 완전히 사용자 지정 형식입니다. 데이터 나 데이터베이스 구조를 변경할 수 없습니다.
이 기사 에서 영감을 받아 사용자를 인증하는 고유 한 토큰 기반 방법을 사용했지만 확립 된 보안 프레임 워크를 사용할 때의 완전성과 (재) 보증이 부족합니다.
위에서 언급 한 제약 조건을 감안할 때 현재 프로젝트 내에서 OAuth2와 같은 기존 프레임 워크를 통합하는 방법이 있습니까? 차이가 있는지는 모르겠지만 OWIN을 사용하여 자체 호스팅하고 있습니다.
이것은 비슷한 질문에 대한 좋은 대답입니다. 기본적으로 다음과 같이 말합니다.
- 구현하는 사용자 정의 사용자 클래스를 만듭니다.
IUser
- 구현하는 사용자 정의 사용자 저장소 정의
public class UserStoreService : IUserStore<CustomUser>, IUserPasswordStore<CustomUser>
- 모든 것을 연결
대답이 매우 광범위하기 때문에 기본 단계를 제공했습니다. 자세한 내용은 다음과 같습니다. asp.net 웹 API 2에서 내 자신의 테이블 집합에 대한 인증을 사용자 지정하는 방법
이것은 또한 웹 API에도 적용되는 매우 귀중한 콘텐츠입니다.
JumpStart의 ID로 ASP.NET 인증 사용자 정의
https://channel9.msdn.com/Series/Customizing-ASPNET-Authentication-with-Identity
HTH
웹 API 내에서 json 토큰 인증을 구현하는 동안 내 솔루션을 우연히 발견했습니다. 그것은주의하는 것이 중요하다 (는 HTTP 요청의 인증 헤더를 통해 토큰 JSON을 전송하여 내 솔루션 핸들 인증 되지 쿠키를 통해 ) 및 하지 Microsoft.Identity 프레임 워크를 사용하여.
어쨌든, 저는 기본적으로 Taiseer Joudeh가 유용하게 설명한 솔루션을 요리 책 방식으로 구현했습니다. http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt- owin 인증 서버 /
주목해야 할 핵심 사항은 다음과 같은 코드입니다.
//Dummy check here, you need to do your DB checks against memebrship system http://bit.ly/SPAAuthCode
if (context.UserName != context.Password)
{
context.SetError("invalid_grant", "The user name or password is incorrect");
//return;
return Task.FromResult<object>(null);
}
당연히 위의 코드를 (아마도 기존의) 사용자 데이터베이스를 확인하는 고유 한 방법으로 대체 할 수 있습니다. 이것을 구현 한 후에는 Visual Studio가 설치하는 새로운 코드 우선 ID 프레임 워크를 사용할 필요가 없다는 것을 깨달았습니다.
이 작업을 수행하기 위해 다음을 수행했습니다.
1) 빈 프로젝트를 생성하고 Change Authentication / Individual User Accounts를 선택했습니다 . 이렇게하면 쿠키 및 코드 우선 ID 프레임 워크 파일을 통해 토큰 인증을 사용하는 데 필요한 대부분의 필수 참조 및 파일이 설치됩니다.
2) Taiseer Joudeh의 리드에 따라이 파일을 편집했습니다. 이를 위해서는 CustomOAuthProvider.cs와 같은 일부 새 개체가 필요합니다. 그리고이 코드 블록을 사용자 정의하여 사용자 / 암호 검사를 구현해야합니다.
if (context.UserName != context.Password) { context.SetError("invalid_grant", "The user name or password is incorrect"); //return; return Task.FromResult<object>(null); }
Taiseer Joudeh의 지침에 대한 링크 : http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/
3) 내 프로젝트에서 외부 파일 (AccountBindingModels.cs, AccountViewModels.cs, IdentityModels.cs, ApplicationOAuthProvider.cs, identityConfig.cs, AccountBindingModels.cs, AccountViewModels.cs)을 정리했습니다. 기본적으로 더 이상 Microsoft ID 참조가 없습니다.
나는 microsoft.identity가 훌륭하다고 확신하지만, 이미 다른 구조의 레거시 데이터베이스 등을 사용하고있을 때 데이터베이스의 코드 우선 구현에 짜증이났습니다. 이것이 도움이되기를 바랍니다. 나는 그 결과에 상당히 만족한다 (이를 작동시키기 위해 며칠을 엉망으로 만든 후).
능력이있는 다른 사람이 옵션을 설명 할 수 있습니다. 그러나 서비스로 인증이 옵션이라면 Auth0 @ https://auth0.com 을 확인 하십시오.
간단한 SQL Server 테이블 및 AD에 대해 HTML / JS 및 네이티브 Windows Phone 애플리케이션을 모두 사용하여 서비스 (Azure 플러그인)를 테스트했습니다. 거의 제로 두통에 가까운 매력을 작동합니다.
이것은 완전히 미쳤고 잘못된 접근 방식 일 수 있지만 비슷한 문제에 직면했습니다. 새로운 웹 앱 (MVVM + WebAPI), 토큰 발급 및 유효성 검사에 사용되는 레거시 시스템. http://tech.pro/tutorial/1216/implementing-custom-authentication-for-aspnet 에서 영감을 얻었으며 내 응용 프로그램은 주로 함께 제공되는 GUI (MVVM 웹 응용 프로그램)에서 사용되기 때문에 "쿠키 기반"을 사용하기로 결정했습니다. "FormsAuthentication에서 생성 한 토큰입니다. FormsAutnentication 쿠키 / 티켓은 .net 내부 매직 보안에 의해 보호됩니다 (ID는 완전히 안전하고 깨지지 않는다고 가정합니다).
제 경우에는 쿠키가 단순히 레거시 시스템에서 발행 한 티켓을 보유하고 있습니다 (그러나 사용자 지정 유형을 JSONSerializing하여 더 많은 세부 정보도 저장할 수 있음). 승인하는 동안 내 시스템은 레거시 시스템에 대해 토큰의 유효성을 검사합니다. 사용자 지정 AuthorizationFilter와 함께 비슷한 것을 사용할 수 있다고 생각합니다.
기존 클래스를 사용하고 싶지 않았고 마침내 다음과 같은 매우 간단한 것이 나왔습니다.
var userName = context.UserName;
var password = context.Password;
var userService = new UserService(); // our created one
var user = userService.ValidateUser(userName, password);
if (user != null){
.......
}
여기에서 전체 세부 사항을 참조하십시오. 사용자 정의 데이터베이스를 사용한 OAuth 웹 API 토큰 기반 인증
대한 사용자 정의 데이터베이스와 역할 기반 인증 이 도움이 될 것입니다 희망
'program tip' 카테고리의 다른 글
Chrome에 '앗 이런'화면이 표시 될 때 추가 정보를 얻는 방법은 무엇입니까? (0) | 2020.11.22 |
---|---|
Eclipse + EGit : 작업 공간에 프로젝트 복제 (0) | 2020.11.22 |
Facebook 사용자 액세스 토큰은 서버 측에서 어떻게 사용해야합니까? (0) | 2020.11.22 |
봄과 빈혈 도메인 모델 (0) | 2020.11.22 |
앱 타나 스튜디오의 배경색은 어떻게 변경하나요? (0) | 2020.11.22 |