我正在使用 IdentityServer3 发布令牌并尝试使用 Thinktecture.IdentityModel.Owin.ResourceAuthorization.WebApi 来授权 Web api 的资源访问。
我正在使用下面的代码来授权控制器的操作。
[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 没有角色声明。我在注册用户时不存储用户声明。如何随时随地为经过身份验证的用户添加声明?