Вимоги: При запиті API буде включена інформація про автентифікацію токена JWT. Бекенд повинен перевірити, чи дійсний підпис токена, а потім підтвердити, чи закінчився термін дії, інформацію про випуск тощо.
URI набору ключів JSON
jwks_uri (JSON Web Key Set URI) є стандартним елементом конфігурації у специфікаціях OAuth 2.0 та OpenID Connect (OIDC).
Простіше кажучи, це публічна URL-адреса (або кінцева точка), яка вказує на місце, де сервер автентифікації публікує свій «набір відкритих ключів». У стандартному процесі OIDC сервер автентифікації надає кінцеву точку виявлення сервісу, що містить адресу jwks_uri.
Популярна метафора
Якщо JWT (або ідентифікаційний токен), виданий сервером автентифікації, порівнюється з листом із офіційною печаткою, тоді:
• Приватний ключ: «фізична пломба», заблокована в сейфі, що зберігається сервером автентифікації, і використовується для штамповки (підписання). • jwks_uri: Це розділ «розкриття патернів пломби», розміщений на офіційному сайті сервером автентифікації. • Сторонній додаток (клієнт або сервер ресурсів): Після отримання листа завантажте дизайн печатки (публічний ключ) з цієї jwks_uri адреси та порівняйте його з штампом на листі, щоб довести, що лист дійсно був виданий офіційною компанією і не був підроблений.
Тут значення використання в колекції ключів таке:
"sig": Підпис, який використовується для перевірки або генерації підписів з метою забезпечення цілісності даних і захисту від підробки. "enc": Шифрування, що використовується для шифрування або розшифрування даних, а також для керування ключами (шифрування ключів) для забезпечення конфіденційності даних.
Як показано нижче:
Інформацію про розбір JWT
Спочатку встановіть пакет nuget:System.IdentityModel.Tokens.Jwt, згідно з інформацією про претензії з jwt, код виглядає так:
Результат виглядає так:
Носій 1059EC2E-FFA8-4FF5-BC47-F25D7E37AA5A
Перевірте достовірність підпису JWT
Спочатку потрібно звернутися до пакету System.IdentityModel.Tokens.Jwt. Є два способи перевірити достовірність підпису.
Рішення 1: ланцюг сертифікатів X.509
Десеріалізація виконується відповідно до міжнародного стандарту X.509, витягуючи всю структуровану інформацію зі сертифіката (таку як відкритий ключ, емітент, термін дії, серійний номер тощо) та генеруючи об'єкт X509Certificate2. Нарешті, прихований публічний ключ RSA всередині отримується для перевірки токена JWT. Код виглядає так:
Як показано нижче:
Рішення 2: JsonWebKey
Конвертація у Ключ Безпеки: Він автоматично ідентифікує тип алгоритму всередині. Потім перевіряйте валідність токена. Код виглядає так:
(Кінець) |