Как я могу изменить действительность JwtSecurityToken? - PullRequest
0 голосов
/ 22 января 2020

Я создаю JwtSecurityToken в своем проекте.

SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(constant.securityKey));

Claim[] claims = new Claim[]
{
        new Claim(ClaimTypes.Name , constant.tokenClaim)
};

JwtSecurityToken jwt = new JwtSecurityToken(
    claims: claims,
    notBefore: DateTime.UtcNow,
    expires: DateTime.UtcNow.AddMinutes(10),
    signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
);

return new JwtSecurityTokenHandler().WriteToken(jwt);

Но я хотел знать, возможно ли изменить действительность токена после его создания?

Ответы [ 2 ]

1 голос
/ 22 января 2020

Я думаю, что ответ прост: «Нет». Строка:

signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)

указывает, что JWT подписывается с использованием HMA C, поэтому любое изменение любого значения в токене после создания будет означать, что полезная нагрузка и подпись не будет совпадать, и токен будет недействительным.

Вы всегда можете дать токену короткое время жизни и потребовать частого обновления его sh, если вам нужно изменить содержимое

1 голос
/ 22 января 2020

Вы не можете сменить токен, не отменив его снова. Так что на самом деле вам всегда нужно создать новый токен.

Это обычно называется silent refre sh. Некоторая проверка выполняется, чтобы увидеть, близок ли срок действия токена. Если это так, новый токен запрашивается в обычном порядке (или вы создаете его явно).

Поэтому, если вы дадите кому-нибудь токен, он не сможет создать действительный токен без сертификата.

Если вам нужна функциональность OAuth 2.0, ознакомьтесь с проектом с открытым исходным кодом IdentityServer

...