Authentication 如何进行JWT验证

Authentication 如何进行JWT验证,authentication,jwt,Authentication,Jwt,我读到,当使用JSon Web令牌时,我们不需要在数据库中存储任何东西。然后,我们可以在不查看数据库的情况下获取用户id。怎么可能呢?嘿,看看这个 可能会让您了解它是如何工作的。当您解码JWT时,有效负载由几个“声明”组成。(=属性)。 在oAuth或OpenIdConnect中,“sub”声明唯一标识所查询系统中的用户。所以,正如你所说,这可以被看作是一个ID 这是非常非常简短的版本 希望这有助于验证Jwt中间件类中的令牌,该类在每个授权请求中调用方法fire JwtMiddleware

我读到,当使用JSon Web令牌时,我们不需要在数据库中存储任何东西。然后,我们可以在不查看数据库的情况下获取用户id。怎么可能呢?

嘿,看看这个
可能会让您了解它是如何工作的。

当您解码JWT时,有效负载由几个“声明”组成。(=属性)。 在oAuth或OpenIdConnect中,“sub”声明唯一标识所查询系统中的用户。所以,正如你所说,这可以被看作是一个ID

这是非常非常简短的版本


希望这有助于验证Jwt中间件类中的令牌,该类在每个授权请求中调用方法fire

JwtMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly TokenValidationParameters _tokenValidationParams;
        public JwtMiddleware(RequestDelegate next, TokenValidationParameters 
        tokenValidationParams)
        {
            _next = next;
            _tokenValidationParams = tokenValidationParams;
        }

    

    public async Task Invoke(HttpContext context)
            {
            try{
                var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
    
                var jwtTokenHandler = new JwtSecurityTokenHandler();
                // Validation 1 - Validation JWT token format
                var tokenInVerification = jwtTokenHandler.ValidateToken(token, _tokenValidationParams, out var validatedToken);
    
                if (validatedToken is JwtSecurityToken jwtSecurityToken)
                {
                    var result = jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256, StringComparison.InvariantCultureIgnoreCase);
    
                    if (result == false)
                    {
                        Error Invalid = new Error()
                        {
                            Success = false,
                            Errors = "Token is Invalid"
                        };
    
                        context.Items["Error"] = Invalid;
                    }
                }
           }
           catch (Exception ex)
            {
                Error Invalid = new Error()
                {
                    Success = false,
                    Errors = "Token does not match or may expired."
                };
                context.Items["Error"] = Invalid ; // userService.GetById(userId);
            }
                await _next(context);
        }
    }

写下你自己的答案,否则链接添加为评论