繁体   English   中英

如何在 ASP.NET Core WebApi 中使用自定义类型从 ClaimsPrincipal.Identity.Name 设置 ClaimsPrincipal.Identity.Name

[英]How to set ClaimsPrincipal.Identity.Name from Claim with custom type in ASP.NET Core WebApi

我使用 JWT Bearer 来保护我的 WebApi 端点。 到目前为止一切正常,但我想知道为什么ClaimsIdentityClaimsPrincipal的“名称”属性为空。 我记得在某个地方可以找到信息,该属性是根据“名称”类型的Claim的内容设置的(正确的???)。 我的 JWT 中有一个“用户名”类型的声明,其中包含用户名,我尝试找到一种方法将其映射到HttpContext.User.Identy.Name属性。

有什么配置吗?

编辑:整个项目仅用于教育目的,这就是代码非常简单的原因......

这就是我设置Claim的方式:

private string GenerateJwtToken(User user)
{
    // generate token that is valid for 7 days
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes(_appSettings.JwtSecret);

    var claims = new List<Claim>
    {
        new("id", user.Id.ToString()),
        new("username", user.Username)
    };

    if (user.Username == "pbrause")
        claims.Add(new("weatherForecast", "true"));

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(claims),
        Expires = DateTime.UtcNow.AddDays(7),
        Issuer = "me",
        Audience = "you",
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
        IssuedAt = DateTime.UtcNow
    };

    var token = tokenHandler.CreateToken(tokenDescriptor);

    return tokenHandler.WriteToken(token);
}

我使用ClaimTypes.Name作为键和user.username作为值来设置声明,然后我可以在HttpContext.User.Identy.Name中获取用户名。

 List<Claim> claims = new List<Claim>
    {
         new Claim(ClaimTypes.Name, user.UserName),
                        
         //..........
     };

演示:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM