我正在尝试减小JWT令牌的大小,该令牌在内部通过用户角色获取声明。为此,我创建了与声明名称相同的名称的策略,并在策略注册中设置了policy.RequireRole
属性,如下所示:
public static IServiceCollection RegisterPolicies(this IServiceCollection services, IClaimApplication claimApplication)
{
var applicationClaim = new ApplicationClaim();
services.AddAuthorization(async options =>
{
var ClaimList = await claimApplication.GetList(applicationClaim);
foreach (var item in ClaimList)
{
//Commented this code for Testing in development env:
//if (item.ClaimType == "Inventory.Get")
if (item.ClaimType == "some claim")
{
options.AddPolicy(item.ClaimCode, policy => policy.RequireRole("admin","test"));
}
else
{
options.AddPolicy(item.ClaimCode, policy => policy.RequireClaim(item.ClaimCode));
}
}
});
return services;
}
这很好,因为它减小了令牌的大小,因为现在我只需要返回用户角色,并且将策略与数据库中具有某些角色的声明绑定在一起。
此调用是通过数据库注册的,但是问题在于这是仅在应用程序启动时注册的策略,对该用户角色的声明所做的任何添加都不会在应用程序启动之前生效。
我不知何故需要根据数据库中的更改动态重置某些策略,但是没有运气找到可能对我有所帮助的东西。有人可以给我指出正确的方向吗?
我也无法将此用例用于自定义策略要求