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は何の役割の主張を持っていません。私はユーザー登録時にユーザークレームを保管しません。外出先で認証されたユーザーの申し立てを追加するにはどうすればよいですか?
私のコードは、あなたのように見えますが、CheckAccessAsync方法は、私が 'ResourceAuthorize'属性を入れているにもかかわらず、実行されませんさん私は 'app.UseResourceAuthorization(MyAuthorizationManager)'という権限を設定しました。私はこれを稼働させるために必要なことが他にあるかどうか知っていますか? –
'app.UseResourceAuthorization(new MyAuthorizationManager())' – dudedev
goに申し立てを追加するには、クラスAbstractIdentityUserService(Axoom.Core.IdentityServer.Services)のGetClaimsForUserAsyncメソッドをオーバーライドし、そこにクレームを追加します。 – dudedev