2

IdentityServer3を使用してトークンを発行し、ThinkTecture.IdentityModel.Owin.ResourceAuthorization.WebApiを使用してWeb APIのリソースアクセスを許可しようとしています。ResourceAuthorize( "Read"、 "UsersList")が機能しない、ResourceAuthorizationManager

私は以下のコードを使用してコントローラの動作を認証しています。

[ResourceAuthorize("Read","UsersList")] 

ResourceAuthorizationManagerは以下のようになります。

public class MyAuthorizationManager : ResourceAuthorizationManager 
{ 
    /// <summary> 
    /// Verify Access Rights 
    /// </summary> 
    /// <param name="context"></param> 
    /// <returns></returns> 
    public override Task<bool> CheckAccessAsync(ResourceAuthorizationContext context) 
    { 
     switch (context.Resource.First().Value) 
     { 
      case "UsersList": 
       return AuthorizeUsersList(context); 
      default: 
       return Nok(); 
     } 
    } 

    private Task<bool> AuthorizeUsersList(ResourceAuthorizationContext context) 
    { 
     switch (context.Action.First().Value) 
     { 
      case "Read": 
       return Eval(context.Principal.HasClaim("role", "User")); 
      case "Write": 
       return Eval(context.Principal.HasClaim("role", "Owner")); 
      default: 
       return Nok(); 
     } 
    } 
} 

制御がAuhtorizeUsersListに来るときしかし、context.Principalは何の役割の主張を持っていません。私はユーザー登録時にユーザークレームを保管しません。外出先で認証されたユーザーの申し立てを追加するにはどうすればよいですか?

+0

私のコードは、あなたのように見えますが、CheckAccessAsync方法は、私が 'ResourceAuthorize'属性を入れているにもかかわらず、実行されませんさん私は 'app.UseResourceAuthorization(MyAuthorizationManager)'という権限を設定しました。私はこれを稼働させるために必要なことが他にあるかどうか知っていますか? –

+0

'app.UseResourceAuthorization(new MyAuthorizationManager())' – dudedev

+0

goに申し立てを追加するには、クラスAbstractIdentityUserService(Axoom.Core.IdentityServer.Services)のGetClaimsForUserAsyncメソッドをオーバーライドし、そこにクレームを追加します。 – dudedev

答えて

1

多分他の人には役に立ちます。

基本的に、スコープとしてAPIを定義している間にスコープ・クレーム・マッピング内に「ロール」主張がありませんでした。スコープの一部として必要なすべてのクレームをリストするだけで、IdentityServerが残りの部分を処理します。アイデンティティサーバー側で

new Scope 
{ 
    Enabled = true, 
    Name = "ScopeName", 
    Type = ScopeType.Identity, 
Claims = new List<ScopeClaim> 
    { 
     new ScopeClaim("role") 
    } 
} 
関連する問題