Обновление Microsoft.IdentityModel.Tokens с 6.27 до 8.15C#

Место общения программистов C#
Ответить
Anonymous
 Обновление Microsoft.IdentityModel.Tokens с 6.27 до 8.15

Сообщение Anonymous »

Я пытаюсь обновить все наши устаревшие пакеты Nuget, один из которых — модель идентификации. Мы используем это для генерации и проверки токена jwt. Я хочу понять изменения между всеми версиями, чтобы попытаться выяснить, что нуждается в обновлении.
Проблема 1
В моей тестовой среде есть небольшой инструмент, который я могу использовать для создания токенов, однако кажется, что мой ключ безопасности слишком мал для HmacSha256Signature. Когда это было создано более двух лет назад, наш секрет был очень мал. Это код, который нам нужен для создания нового токена.
Изображение

Я знаю, что мой секрет преобразования из base64 — 24 бита. Было ли это изменено или это был недостаток, который Microsoft впоследствии исправила? Было бы лучше преобразовать ключ (который находится в нашем файле веб-конфигурации API) в строку base64, а затем преобразовать ее в байты? Пример ниже:

Код: Выделить всё

// Secret is a base64 string
SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Secret));
ClaimsIdentity claimsIdentity = new ClaimsIdentity(Claims);
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor
{
Audience = Audience,
Issuer = Issuer,
Subject = claimsIdentity,
SigningCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature),
IssuedAt = DateTime.UtcNow
};

if (ExpiryDate.HasValue)
{
descriptor.Expires = ExpiryDate;
}
else
{
handler.SetDefaultTimesOnTokenCreation = false;
}

JwtSecurityToken token = handler.CreateJwtSecurityToken(descriptor);
return handler.WriteToken(token);
Я считаю, что Encoding.UTF8.GetBytes(Secret) выдает 32 бита, что, я думаю, поможет, но я не уверен, что это правильный путь.
Проблема 2
При попытке протестировать наш API мы постоянно терпим неудачу при проверке передаваемого токена, в частности при попытке получить утверждения принцип.
Изображение

Мы постоянно получаем сообщение об ошибке: ключ отсутствует. Я также предполагаю, что из-за того, что мы не можем создать токен из-за слишком маленького размера ключа безопасности, у нас также может возникнуть эта проблема. Я подумываю сделать что-то подобное при создании токена, поэтому эту часть менять не нужно.

Код: Выделить всё

SymmetricSecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Secret));
securityKey.KeyId = NewID;
ClaimsIdentity claimsIdentity = new ClaimsIdentity(Claims);
Таким образом, я надеюсь, что у ключа безопасности теперь есть достаточно длинный ключ и ребенок. Это правильно?

Подробнее здесь: https://stackoverflow.com/questions/798 ... 27-to-8-15
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»