ASP.net MVC 自定义声明

Posted

技术标签:

【中文标题】ASP.net MVC 自定义声明【英文标题】:ASP.net MVC Custom Claims 【发布时间】:2021-09-09 20:48:08 【问题描述】:

当用户登录系统时,我正在调用用户访问权限。在我的用户访问包括 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;
            
        

【问题讨论】:

【参考方案1】:

我这样做了,它工作正常:

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();

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

【讨论】:

谢谢@AribYousuf 我也会检查一下【参考方案2】:

您可能可以尝试类似这样的方法 claim.Add(new Claim("customClaim", "claimValue"));

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

【讨论】:

以上是关于ASP.net MVC 自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

在登录时循环自定义声明 - Asp.net 核心

如何在 Visual Studio 2017 的 ASP.NET MVC 中创建自定义生成/脚手架模板(Razor)?

ASP.NET 核心 1.0。 Bearer Token,无法访问自定义声明

ASP.NET Core 和 JSON Web 令牌 - 自定义声明映射

ASP.NET Core 2.2 Razor 页面中的自定义路由

如何使用 api 连接器和 asp net core web api 通过自定义声明丰富 azure b2c 令牌