通过Web API上使用JWT令牌-Asp.net核心标识的角色声明授权



过去几天我一直在学习Asp.Net Identity,我熟悉使用[Authorize(Roles = "Admin")][Authorize(Policy = "OnlyAdminAndModerators")]授权控制器

我使用JWT令牌,当通过"[授权(角色="管理员")]"进行授权时,我所要做的就是在我的令牌上设置一个角色类型,如下所示:

{  
"nameid": "a173e923-1808-4d7d-2b64-08d684882677",  
"unique_name": "yuri",  
"role": [  
"Admin",  
"Moderator"  
],  
"nbf": 1549522727,  
"exp": 1549609127,  
"iat": 1549522727  
}  

这样,我的控制器就可以通过json上的"角色"名称和">Admin"值进行身份验证。

我所听到的是,可以在Identity AspNetRole表上创建一个角色,通过AspNetrolClaims表将声明与该角色关联,例如,Admin会有"CanAdd"声明,然后在Startup类上,我可以创建一个类似options.AddPolicy("Add Role", policy => policy.RequireClaim("CanAdd", "AddClaim"));的Policy

最后,我可以在我的控制器上,用[Authorize(Policy = "Add Role")]设置一个方法,控制器将授权任何具有管理员角色的用户,因为他将拥有CanAdd声明。

对不起,我知道这是个大问题,但我真的很想让它发挥作用
提前谢谢。

根据令牌的内容检索额外声明的一种方法可以在读取令牌之后和授权步骤之前运行的消息处理程序中完成。对于.NET完整框架,我使用OWin来实现这一点。这个块将额外的声明注入到声明原则中,然后可以在您定义的策略中使用。

这是我的启动文件:

ConfigureAuthorization->我的扩展方法包装tge BearerTokenAuthentication owin块IncludeAzureActiveDirectoryUserClaims->从Azure APi获取声明并添加它们。。。

using Owin;
[assembly: OwinStartup(typeof(Token.API.Startup))]
namespace Token.API
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
app.ConfigureAuthorization(ClaimsProviders
.InitializeAuthorizationProviders()
.IncludeAzureActiveDirectoryUserClaims()
);
}
}
}

如果我为.NET Core做这件事,它会看起来像这样:承载身份验证:链接

在启动.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseAuthentication();
app.Use(async (context, next) =>
{
//Retrieve claims from database based on roles in token.
// Add to loaded identity    (= context.User)           
await next.Invoke();
});

最新更新