【问题标题】:Validating JWT token ASP.NET Core MVC验证 JWT 令牌 ASP.NET Core MVC
【发布时间】:2020-09-04 05:13:35
【问题描述】:

我有一个 ASP.NET Core 应用程序。

在应用程序中,我有一个 AuthController,例如:

   [HttpPost("register")]
    public async Task<IActionResult> Register([FromBody] UserForRegisterDto userForRegisterDto)
    {
        var userToCreate = new IdentityUser(userForRegisterDto.Username);
        var result = await _userManager.CreateAsync(userToCreate, userForRegisterDto.Password);

        return Ok(new
        {
            token = GenerateJwtToken(userToCreate).Result,
            user = result
        });

    }

    private async Task<string> GenerateJwtToken(IdentityUser user)
    {
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.NameIdentifier, user.Id),
            new Claim(ClaimTypes.Name, user.UserName)
        };

        var roles = await _userManager.GetRolesAsync(user);

        foreach (var role in roles)
        {
            claims.Add(new Claim(ClaimTypes.Role, role));
        }

        var key = new SymmetricSecurityKey(Encoding.UTF8
          .GetBytes(_config.GetSection("AppSettings:Token").Value));

        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = creds
        };

        var tokenHandler = new JwtSecurityTokenHandler();

        var token = tokenHandler.CreateToken(tokenDescriptor);

        return tokenHandler.WriteToken(token);
    }

如您所见,在注册时,API 会将 JWT 令牌发送回客户端。 我想针对应用程序中的所有控制器验证此令牌。

我知道我必须在Startup.cs 文件中添加一些逻辑,但我就是不知道是什么。谁能帮我实现这个目标?

【问题讨论】:

  • 验证是什么意思?您想将该令牌中的身份插入到 http 上下文中吗?

标签: asp.net-core


【解决方案1】:

也许添加一个全局身份验证过滤器:

services.AddMvc(config =>
        {
            var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        });

或者在控制器上方添加[Authorize]

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 2020-07-01
    • 2019-10-20
    • 2021-12-17
    • 1970-01-01
    • 2021-06-27
    • 2017-10-26
    • 2018-08-30
    • 2017-01-03
    相关资源
    最近更新 更多