2017-09-07 9 views
1

Web APIのAzure ADアプリケーションロールにユーザ権限を設定したいのですが、トークンの検証でロールが実際のクレームに変換されていません応答。Web APIのAzure認証 - 検証後にロールクレームが見つかりません

私はClaimsPrincipal.Current.Claimsリストではなく、プロパティ名役割なく主張スキーマhttp://schemas.microsoft.com/ws/2008/06/identity/claims/role下の役割を見ることができます。

私は「役割」RoleClaimTypeを設定することで、役割を認識するための許可属性を取得するために管理しています。

しかし、Azureが役割を返すようにするにはどうすればいいですか。つまり、HasClaim(ClaimTypes.Role、 "AdminRole")がtrueを返します。

Controller.cs

[Authorize(Roles = "AdminRole")] 
public IEnumerable<Item> Get() 
{ 
    var a = ClaimsPrincipal.Current.HasClaim(ClaimTypes.Role, "AdminRole"); // false 
    var b = User.IsInRole("AdminRole"); // true 
} 

Startup.cs

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions 
    { 
     Tenant = ConfigurationManager.AppSettings[ "ida:Tenant" ], 
     TokenValidationParameters = 
      new TokenValidationParameters 
      { 
       ValidAudience = ConfigurationManager.AppSettings[ "ida:Audience" ], 
       RoleClaimType = "roles" // makes this work: User.IsInRole("AdminRole") 
      } 
    }); 
} 

AzureのポータルのWeb APIとネイティブWPFクライアントを登録

  • Webアプリケーションのマニフェストを修正し、いくつかの役割を組み込んでいます。 「Azure ポータル/アプリケーション登録/編集マニフェスト」
  • Web Apiアプリケーションに少数のユーザーを追加/割り当て、 ロールを1つまたは別のロールに指定しました。 「Azureのポータル/エンタープライズアプリケーション/ [アプリケーション名] - ユーザーとグループ」ここまで読んですべての人のために

- 事前に感謝を!

答えて

2

アズールADから放出されたクレームはタイプ「役割」である、あなたは、あなたが検証作業の下に作ることができ、rolesとして(TokenValidationParametersで)RoleClaimTypeを設定する必要があります。

var a = ClaimsPrincipal.Current.HasClaim("roles", "AdminRole"); 
    var b = User.IsInRole("AdminRole"); 
+0

ありがとう!なぜ、AADがもっと長いhttp://.../roleの代わりに役割を果たしているのか分かりますか? – MatiasK

+0

申し訳ありませんが、なぜ私は分かりません。 –

関連する問題