Обидва варіанти посилаються на те, який алгоритм постачальник ідентифікаційних даних використовує для підписання JWT. Підписання - це криптографічна операція, яка генерує "підпис" (частина JWT), яку одержувач жетону може підтвердити, щоб гарантувати, що маркер не був підроблений.
RS256 (RSA Signature with SHA-256 ) - це асиметричний алгоритм , і він використовує пара публічних / приватних ключів: постачальник ідентифікаційних даних має приватний (секретний) ключ, який використовується для створення підпису, а споживач JWT отримує відкритий ключ для підтвердження підпису. Оскільки відкритий ключ, на відміну від приватного ключа, не потрібно захищати, більшість постачальників ідентифікаційних даних забезпечує його доступність для споживачів для отримання та використання (зазвичай через URL-адресу метаданих).
HS256 ( HMAC з SHA-256), з іншого боку, включає комбінацію хеш-функції та одного (секретного) ключа, який ділиться між двома сторонами, використовуваними для створення хеша, який буде служити підписом. Оскільки один і той же ключ використовується як для генерування підпису, так і для підтвердження його, слід подбати про те, щоб ключ не був порушений.
Якщо ви будете розробляти додаток, що споживає JWT, ви можете сміливо використовувати HS256, оскільки ви будете контролювати, хто використовує секретні ключі. Якщо, з іншого боку, у вас немає контролю над клієнтом, або у вас немає способу закріпити секретний ключ, RS256 буде краще підходити, оскільки споживачеві потрібно знати лише відкритий (загальний) ключ.
Оскільки відкритий ключ зазвичай надається з кінцевих точок метаданих, клієнти можуть бути запрограмовані автоматично отримувати відкритий ключ. Якщо це так (як це відбувається з бібліотеками .Net Core), вам доведеться менше працювати над налаштуванням (бібліотеки отримають відкритий ключ із сервера). З іншого боку, симетричні клавіші потрібно обміняти поза межами діапазону (забезпечуючи захищений канал зв'язку) та оновити вручну, якщо є перехід клавіші підпису.
Auth0 надає кінцеві точки метаданих для протоколів OIDC, SAML та WS-Fed, де відкриті ключі можна отримати. Ви можете побачити ці кінцеві точки у розділі "Розширені налаштування" клієнта.
Наприклад, кінцева точка метаданих OIDC приймає форму https://{account domain}/.well-known/openid-configuration
. Якщо перейти до цієї URL-адреси, ви побачите об’єкт JSON із посиланням на https://{account domain}/.well-known/jwks.json
, який містить відкритий ключ (або ключі) облікового запису.
Якщо ви подивитеся на зразки RS256, ви побачите, що не потрібно налаштовувати відкритий ключ ніде: він автоматично отримується рамкою.