Проверка и проверка подлинности JWT - PullRequest
1 голос
/ 06 августа 2020

Я реализовал JWT Auth в своем проекте. JWT генерируется с использованием приведенного ниже кода (принимая имя пользователя и переход от пользователя и находя его из базы данных) код ниже.

public AuthenticateResponse Authenticate(AuthenticateRequest model)
    {
        var userres = new Users { Username = model.Username, Password = model.Password };
        var user = GetById(userres);

        // return null if user not found
        if (user == null) return null;

        // authentication successful so generate jwt token
        var token = generateJwtToken(user);

        return new AuthenticateResponse(user, token);
    }
private string generateJwtToken(Users user)
    {
        // generate token that is valid for 30 days
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[] { new Claim("Username", user.Username.ToString()) }),
            Expires = DateTime.UtcNow.AddDays(30),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
        };
        var token = tokenHandler.CreateToken(tokenDescriptor);
        return tokenHandler.WriteToken(token);
    }

Следующее, что я не понимаю, как я могу аутентифицировать сгенерированный токен JWT каждый раз, когда пользователь отправляет мне получить доступ к API. Как это реализовать и как это работает? Я нашел много решений, но не понимаю, как они проверяют этот ключ?

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Я использую этот код для проверки токена

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenManagement.Secret));

var tokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false, //you might want to validate the audience and issuer depending on your use case
ValidateIssuer = false,
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
ValidateLifetime = false //here we are saying that we don't care about the token's expiration date
};

var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken securityToken;
var principal = tokenHandler.ValidateToken(token, tokenValidationParameters, out securityToken);

var jwtSecurityToken = securityToken as JwtSecurityToken;

if (jwtSecurityToken == null || !jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256Signature, StringComparison.InvariantCultureIgnoreCase))
throw new SecurityTokenException("Invalid token");

return principal;
0 голосов
/ 06 августа 2020

Вы можете добавить заголовок авторизации для заголовков запроса на стороне клиента, а затем вы можете проанализировать токен, чтобы получить то, что вы хотите (идентификатор, имя пользователя и т. Д. c.).

...