Настоящая аутентификация токена Jwt - PullRequest
1 голос
/ 17 июня 2020

Я использую токен jwt для аутентификации, я хочу найти его из базы данных, но я не знаю, как получить доступ к базе данных для проверки пользователей вместо имен пользователей с жестким кодом

, пожалуйста, посмотрите следующий код =>

запуск:

          var key = "123456789fsdphvsaihbviasvsifhdsfdsilafhiopadhfiafosia";
        services.AddSingleton<IJwtAuthentication>(new JwtAuthentication(key)); 

        services.AddAuthentication(z =>
        {
            z.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            z.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(z =>
        {
            z.RequireHttpsMetadata = false;
            z.SaveToken = true;
            z.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(JwtSettings.Secret)),
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateLifetime = true
            };
        });

мой менеджер токенов jwt:

 public class JwtAuthentication : IJwtAuthentication
{
    private readonly DataContext _db;
    private readonly string _key;
    private IDictionary<string, string> db;
    public JwtAuthentication(/*DataContext db,*/ string key)
    {
        // _db = db; 
         db = new Dictionary<string, string>();
        db.Add("user", "password"); 
        _key = key;
    }
    public string Authenticate(string username, string password)
    {
        /*  if (!_db.Set<Account>().Any(z => z.UserName == username && z.Password == password.Hash()))
              return null;*/
        if (!db.Any(z => z.Key == username && z.Value == password))
        {
            return null;
        }

        var tokenHandler = new JwtSecurityTokenHandler();
        var tokenKey = Encoding.UTF8.GetBytes(_key);
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, username)/*,
                new Claim("Authenticated","true")*/
            }),
            Expires = DateTime.UtcNow.AddMinutes(10),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(tokenKey), SecurityAlgorithms.HmacSha512Signature)
        };
        var token = tokenHandler.CreateToken(tokenDescriptor);
        return tokenHandler.WriteToken(token);
    }
}

интерфейс менеджера jwt:

 public interface IJwtAuthentication
{
    string Authenticate(string username, string password);
}

ПРИМЕЧАНИЕ: здесь для теста я использовал словарь но я хочу проверить пользователя из моей базы данных

Я был бы очень благодарен, если бы кто-нибудь поделился ссылкой на учебник. спасибо за помощь

1 Ответ

0 голосов
/ 17 июня 2020

Здесь - хороший пример, которому я лично следовал. В некоторых частях он может быть устаревшим, но все еще работает.

...