Канал-носитель JWT "IDX10609: Расшифровка не удалась. Ключи не пытались" при авторизации - PullRequest
1 голос
/ 07 июля 2019

Я пытаюсь расшифровать зашифрованный токен-носитель JWT.Мой код генерации выглядит следующим образом:

private string GenerateToken(IEnumerable<Claim> claims)
{
    var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetValue<string>("JWTServerKey")));
    var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration.GetValue<string>("JWTServerSecret")));

    var signingCreds = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);
    var encryptingCreds = new EncryptingCredentials(secret, SecurityAlgorithms.Aes128KW, SecurityAlgorithms.Aes128CbcHmacSha256);
    var handler = new JwtSecurityTokenHandler();

    var token = handler.CreateJwtSecurityToken(
        "test",
        "test",
        new ClaimsIdentity(claims),
        DateTime.Now,
        DateTime.Now.AddMinutes(20),
        DateTime.Now,
        signingCreds,
        encryptingCreds);

    return new JwtSecurityTokenHandler().WriteToken(token);
}

В файле startup.cs мой код выглядит следующим образом:

options.TokenValidationParameters = new TokenValidationParameters
{
    ValidateIssuer = true,
    ValidateAudience = true,
    ValidateLifetime = true,
    ValidateIssuerSigningKey = true,
    ValidIssuer = "test",
    ValidAudience = "test",
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWTServerKey"])),
    TokenDecryptionKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWTServerSecret"]))
};

Я получаю следующее исключение: "IDX10609: Расшифровка не удалась. НетКлючи пробовали ".Что я делаю неправильно?? РЕДАКТИРОВАТЬ:

Мой пример не включает в себя фактический ключ, но его длина 128 бит.

1 Ответ

0 голосов
/ 08 июля 2019

Основная причина: Секретный ключ слишком короткий, вы должны заменить JWTServerSecret на что-то еще более длинное (т. Е. JWTServerSecret2).

Для SecurityAlgorithms.Aes128KW и SecurityAlgorithms.Aes128CbcHmacSha256 длина секрета должна составлять 128 бит.

Добавьте следующую строку к ConfigureServices(IServiceCollection services) в Startup.cs, чтобы просмотреть подробности журнала.

IdentityModelEventSource.ShowPII = true;
services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,

        ValidIssuer = "test",
        ValidAudience = "test",
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWTServerKey"])),
        TokenDecryptionKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWTServerSecret"]))
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...