如何进行JWT验证

时间:2014-05-20 12:24:28

标签: authentication jwt

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

3 个答案:

答案 0 :(得分:2)

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

这是非常非常短的版本......

希望这有帮助

答案 1 :(得分:0)

嘿,检查一下 https://developers.google.com/accounts/docs/OAuth2ServiceAccount#creatingjwt 可能会让你知道它是如何运作的。

答案 2 :(得分:0)

验证 Jwt 中间件类中的令牌,在每个授权请求中调用方法

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