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