2017-03-14 1 views
2

私はASP.NET Core APIでAzure ADベーシック層を使用していますが、私はRBAC sampleに従っています。私はそうのように私のマニフェストの役割を持つアプリケーションを設定している:Azure Active Directory RBACがベアラトークンでロールを返さない

appRoles": [ 
    { 
     "allowedMemberTypes": [ "User" ], 
     "displayName": "Read Device", 
     "id": "b2e6f6c2-c3d5-4721-ad49-0eea255ccf45", 
     "isEnabled": true, 
     "description": "Can read a device.", 
     "value": "read_device" 
    }, 
    ... 
] 

私はそうのようなUseJwtBearerAuthenticationミドルウェアを使用するように設定私のAPIました:私は私のユーザー与えてくれた

application.UseJwtBearerAuthentication(
    new JwtBearerOptions() 
    { 
     AuthenticationScheme = "Azure Active Directory", 
     Authority = options.Authority, 
     Audience = options.ClientId, 
     TokenValidationParameters = new TokenValidationParameters() 
     { 
      RoleClaimType = "roles", 
      ValidateIssuer = false 
     } 
    }) 

を「読み取りデバイスの役割上:

enter image description here

私は、認証トークンを取得するための呼び出しを行うために闊歩UIを使用しています。これは、次のURLを呼び出します:

https://login.microsoftonline.com/[Tenant].onmicrosoft.com/oauth2/authorize? 
    response_type=token 
    &redirect_uri=http%3A%2F%2Flocalhost%3A5100%2Fswagger%2Fo2c.html 
    &realm=- 
    &client_id=[Client ID] 
    &scope=http%3A%2F%2Fschemas.microsoft.com%2Fws%2F2008%2F06%2Fidentity%2Fclaims%2Frole 
    &state=oauth2 
    &resource=[Client ID] 

私はscopeパラメータに正しい値を渡しておりませんので、私は、私は考えることができるすべてのscopeを求めて試してみましたことを疑わ:

&scope=openid 
    %20email 
    %20profile 
    %20offline_access 
    %20user_impersonation 
    %20roles 
    %20http%3A%2F%2Fschemas.microsoft.com%2Fws%2F2008%2F06%2Fidentity%2Fclaims%2Frole 
    %20read_device 

場合I私のマニフェストに"groupMembershipClaims": "All"を設定してください。私はグループの主張を見ることができますが、代わりに役割が必要です。私は私のAPIを呼び出すためにログインすることができますが、JWTトークンでは何の役割も返さないので、ユーザーの役割を確認できません。私は間違って何をしていますか?

+1

あなたはその役割を持つアプリにユーザーを割り当てましたか? – juunas

+1

どのようにアクセストークンを取得していますか?それを表示できますか?それが承認コード許可フローまたは類似の委任された呼び出しであれば、それはうまくいくはずです。 – juunas

+0

@juunasコードスニペットで質問を更新しました。 –

答えて

1

あなたはユーザーまたはグループ(allowedMemberTypes =ユーザー)に割り当てられる役割を有効にしたい場合:

  1. あなたは役割の主張を使用して認証を行いたい場合は、あなたが このcode sampleの手順に従うことができますあなたはロールを見つけることができる の請求はid_tokenにあります。

  2. アプリでユーザー 記号を使用すると、デリゲートの流れ(OAuthの認証コードグラントを、使用することができ 役割 請求に基づいて、アクセスルールを確認することができたときに、あなたのWeb APIを呼び出すクライアントアプリケーションを作成する場合暗黙的に グラントフロー..)、ロールの主張はaccess_tokenにあります。

あなたは、クライアントアプリケーション(allowedMemberTypes =アプリケーション)に割り当てられるロールを指定したい場合は、OAuthのクライアント資格フローを使用することができ、クライアントアプリケーションに割り当てられているリソースアプリ/ APIのappRoles、及び必要になりますaccess_tokenで役割の主張を確認し、詳細手順をhereから確認してください。

詳細については、hereをクリックしてください。

3

tokenの代わりにid_tokenをリクエストする必要がありました。 id_tokenには、ユーザーに関する追加のクレーム/スコープ/リソースが含まれています。私はまた、すべての要求に新しいランダムGUIDを含むnonceパラメータを提供する必要がありました。したがって、私は次のURLで終わりました:

https://login.microsoftonline.com/[Tenant].onmicrosoft.com/oauth2/authorize? 
response_type=id_token 
&client_id=[Client ID] 
&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2F 
&nonce=9ac5ad8d-df44-48e6-9bd6-e72743b3625c 
関連する問題