添加具有 Asp.Net 核心身份的持久声明

Add persistent claim with Asp.Net Core Identity

我已经构建了基于身份的自定义授权模块。 来自 db 的权限通过 UserClaimsPrincipalFactory 加载到 Claims 中,效果很好,但仅在登录时发生。

授予新权限时我想我有两个选择:

  1. 向当前 ClaimsIdentity 添加声明
  2. 通过重新创建身份来刷新所有声明

问题是当我尝试使用 user.Identity.AddClaim() 添加声明时,它不会在重新加载页面时持续存在。 而且我找不到有关如何重新加载 ClaimsIdentity 的信息。

我不确定项目何时需要添加外部声明。身份是基于cookie的,每次请求都会携带cookie,所以身份可以解析cookie作为声明。如果要重新加载ClaimsIdentity,需要重用方法SignInAsync重新生成cookie。但是有一个全局方法IClaimsTransformation可以帮助你根据不同的情况添加临时声明。

public class Tanstromer : IClaimsTransformation
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        var claims = new List<Claim> { };
        var identity = principal.Identity as ClaimsIdentity;
        identity.AddClaim(new Claim("",""));

        //you can add some justification here
        var userPrinicpal = new ClaimsPrincipal(identity);
        return Task.FromResult(principal); 
    }
}

在ConfigureService中添加

services.AddScoped<IClaimsTransformation, Tanstromer>();