ASP.net MVC 自定义声明

ASP.net MVC Custom Claims

我是在用户登录系统时调用用户权限。在我的用户访问中包括 UserName,UserRole,UserId,ReqAccess,ViewAccess 等

在我的声明中,我可以添加用户 ID 和用户名,但我想添加对单独声明的其他访问权限,但是当我键入 claims.Add(new Claim(ClaimTypes. 时,列表仅显示列出的项目。如何添加自己的声明并添加?

public void SignInUser(string username, string userRole, string userid, bool isPersistent)
        {
            // Initialization.    
            var claims = new List<Claim>();
            try
            {
                // Setting    
                claims.Add(new Claim(ClaimTypes.Name, username));
                claims.Add(new Claim(ClaimTypes.Role, userRole));
                claims.Add(new Claim("UserId", userid));
                

                var claimIdenties = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
                var ctx = Request.GetOwinContext();
                var authenticationManager = ctx.Authentication;
                // Sign In.    
                authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, claimIdenties);

               
                var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
                var claimsPrincipal = new ClaimsPrincipal(identity);
                Thread.CurrentPrincipal = claimsPrincipal;
            }
            catch (Exception ex)
            {
                // Info    
                throw ex;
            }
        }

你或许可以尝试这样的事情 claims.Add(new Claim("customClaim", "claimValue"));

所以声明 class 应该有一个重载的构造函数,它将字符串值作为声明类型

我这样做了并且工作正常:

var user = await UserManager.FindAsync(model.Email, model.Password);
if (user != null)
{
    var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
    identity.AddClaims(new[] 
    { 
        new Claim("FullName", user.FullName),
        new Claim("roleId", user.Roles.FirstOrDefault().RoleId),
    });
    
    AuthenticationManager.SignIn( new AuthenticationProperties() { IsPersistent = true }, identity);
    return View();
}

获取用户详细信息并将其保存在声明中。