2016-10-01 3 views
2

미리 감사드립니다.Auth0을 사용하여 ASP.NET에서 역할/그룹 별 권한 부여

Auth0 인증 확장 프로그램에 할당 된 그룹에 의해 API 액세스 권한을 부여하는 방법을 알아 내려고합니다.

현재 웹 API에서 [Authorize] 속성을 사용하고 있습니다. 성공적으로 로그인 한 경우 API 호출을 허용하고 그렇지 않은 경우 차단합니다.

그러나 [Authorize (Roles = "myGroupName")]을 시도하면 인증에 실패합니다. 확장 프로그램을 통해 할당하는 대신 Auth0 웹 사이트의 사용자 대시 보드에서 수동으로 사용자 app_metadata에 추가하는 경우에도 마찬가지입니다.

내 프로젝트는 각도 퀵 스타트 및 Asp.Net 빠른 시작을 따라 설정됩니다. 내가 토큰 서버 측의 유효성을 확인 내 webapiconfig은 다음과 같습니다

class WebApiConfig 
{ 
    public static void Register(HttpConfiguration configuration) 
    { 
     var clientID = WebConfigurationManager.AppSettings["auth0:ClientId"]; 
     var clientSecret = WebConfigurationManager.AppSettings["auth0:ClientSecret"]; 

     configuration.MessageHandlers.Add(new JsonWebTokenValidationHandler() 
     { 
      Audience = clientID, 
      SymmetricKey = clientSecret 
     }); 

     configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", 
      new { id = RouteParameter.Optional }); 
    } 
} 
+0

아무런 도움이되지 않습니다. – IfTrue

+1

JsonWebTokenValidationHandler 클래스는 기본적으로 Claim 역할을 추가하지 않습니다. 이 스레드는 https : // auth0입니다.com/forum/t/how-to-push-claims-to-users-profile-on-auth0-asp-net-5-mvc-6/2424/13 –

답변

4

Auth0 Authorization 확장 프로그램은 현재 그룹 개념을 통한 승인 결정을 지원합니다. 그룹을 만들고, 해당 그룹에 사용자를 할당하며, 특정 그룹 내의 사용자 만 액세스 할 수 있도록 응용 프로그램을 구성 할 수 있습니다. 이 모든 것이 자동으로 처리되고 응용 프로그램 예상 그룹 ​​외부의 모든 사용자는 완전한 액세스가 거부됩니다.

유스 케이스는 조금 다르지만 유효합니다. 확장을 사용하여 구성된 그룹을 생성 된 토큰을 따라 전송하여 응용 프로그램 자체에서 해당 값을 기반으로 권한 결정을 내리면됩니다.

확장 프로그램 내에서 구성된 그룹이 토큰과 함께 전송되게하려면 가장 먼저해야 할 일은 요청하는 것입니다. 이를 위해 인증 요청을 수행 할 때 groups 범위를 포함해야합니다.

(가 오픈 ID 그룹 범위를 통해 요청할 수 있습니다) 나가는 토큰에 대한 사용자의 그룹 구성원을 추가;

(강조 광산, 소스 : Authorization Extension Docs 섹션 규칙 동작) 그 범위를 사용하여 토큰을 요청하고 jwt.io에서 디코딩 경우이 비슷한을 얻을 것입니다,

(실제 그룹은 사용자별로 다를 수 있습니다.)

{ 
    "groups": [ 
    "GROUP-1", 
    "GROUP-2" 
    ], 
    "iss": "https://[tenant].auth0.com/" 
} 

이제이 정보는 ASP .NET API 측면에서 확인됩니다.| groups :

  • 유형 : 사용중인 샘플을 가정이 하나 (ASP.NET Web API), 토큰에 포함 된 그룹 정보는 다음의 특허 청구 범위에 매핑 될 것입니다 값 : GROUP-1
  • 유형 : groups | 값 : GROUP-2

이 때문에 같은 종류의 주당 가치 주장을 작성하여 JWT 페이로드에서 오는 배열을 처리하는 JsonWebToken 클래스에 존재하는 논리 발생합니다.

마지막 부분은 AuthorizeAttribute이 역할 클레임을 조회하는 대신 groups 유형의 이러한 클레임을 확인하는지 확인합니다. 클래스의 RoleClaimType 상수를 "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" 대신 "groups"으로 변경하여이 작업을 수행 할 수 있어야합니다.

+0

제 3 자에 의존하지 않기로 마음 먹었습니다. 답변 해 주셔서 감사합니다. 나는이 질문이 질문의 여러면을 다룰 수 있다고 생각한다. – IfTrue

+0

요청에 추가하는 방법에 대한 자세한 정보를 추가하고 싶습니다. 이것이 내가 어떻게 작동하게 만들었나. // 구성 Auth0 로크 = 새로운 Auth0Lock (myConfig.clientID, myConfig.domain { 인증 { PARAMS {범위 '오픈 ID 그룹'} }}); –

0

내가 지금 여기에서 문의거야 언급 권한이 없습니다. 나는 아직도 주위

[Authorize(Roles = "myRoleName")] 

하지 다른 방법으로 입력 된 그룹 기반 권한 부여를 구현 할 때 내가 기억하는 이유는 지금까지이

[Authorize(Roles = "myGroupName")] 

을 다하고 있습니다.

+0

안녕하세요, 걱정할 필요가 없습니다. . 앱 메타 데이터를 역할에 수동으로 할당하고 그룹에 권한 부여 확장을 사용하는 두 가지 방법을 모두 시도했습니다. 그러나 토큰이 Auth0을 사용하여 처리 될 때 두 가지 모두 "그룹"클레임으로 표시됩니다. – IfTrue

2

Certifyly 알고 있듯이 Authorize 속성은 주체에있는 것을 사용하여 작동합니다. IPrincipal을 상속하는 것입니다. 웹 API에서는 훨씬 더 구체적입니다. ClaimsPrincipal을 상속 한 것입니다 (이 자체는 IPrincipal입니다). 이미 확실히 알고 있듯이 소유권 주장은 키 - 값 쌍과 같습니다. ClaimsPrincipal에는 인증 토큰에서 직접 가져온 키 - 값 쌍이 포함됩니다. 이 인증 토큰은 JWT (Json Web Token)와 같이 인증 서버에서 대부분 발급합니다. 대부분의 경우 인증 서버는 OAuth를 사용하고 있습니다. 응용 프로그램에서 역할을 할 것으로 예상되는 사용자 그룹이 기본 권한 부여 특성을 사용하여 작동하지 않는 경우 제대로 매핑되지 않았기 때문에 사용자 그룹이 : Auhtorize은 클레임 유형이 : http://schemas.microsoft.com/ws/2008/06/identity/claims/role 인 클레임을 확인합니다 ("클레임 유형"은 키 - 값 쌍의 "키"입니다). 즉, Authorize을 사용하려면이 소유권 주장을 그룹과 함께 평가해야합니다. 애플리케이션에서 깨끗한 승인을 받으려면 여러 가지 작업을 수행 할 수 있습니다.

  • 사용자 정의 Authorize 속성을 만듭니다. 이 Authorize 속성은 다른 클레임 유형을 사용하여 역할을 확인합니다. 사용자 그룹을 참조하는 클레임 ​​유형은 인증 서버에 따라 다릅니다. 인증 서버의 문서에서 그룹에 대해 사용 된 클레임 유형을 찾지 못하면 디버그에서 응용 프로그램을 실행하고 컨트롤러의 속성 User에 포함 된 모든 클레임을 확인합니다. 관심있는 클레임 ​​유형을 확실히 찾을 수 있습니다.
  • 생성 된 토큰의 사용자 정보와 클레임 사이의 매핑을 다시 정의하여 인증 서버의 설정을 변경하십시오 (사용자 그룹을 이 유형의 클레임은 http://schemas.microsoft.com/ws/2008/06/identity/claims/role입니다. 일반적으로 이는 클라이언트 응용 프로그램이나 심지어 전 세계적으로 설정 될 수 있습니다. 예를 들어, ADFS 인증, AzureAD 또는 WSO2 인증 서버 (http://wso2.com/products/identity-server/)
  • 을 사용하는 경우 수행해야하는 방법입니다. 현재 주체를 수정하기 위해 오 미인 미들웨어를 추가합니다. 그룹을 포함하는 클레임의 값을 클레임 유형 http://schemas.microsoft.com/ws/2008/06/identity/claims/role으로 복사하여 현재 사용자를 변경합니다. 이 미들웨어는 인증 미들웨어 이후의 흐름에 삽입되어야합니다.
+0

답변 해 주셔서 감사합니다. – IfTrue

관련 문제