oauth 2.0 — Azure AD B2C проверяет JWT с переполнением стека

Предупреждение: я абсолютный новичок в JWT и пытаюсь все выяснить.

Сначала … что я понимаю
JWT содержит три сегмента, разделенных . Первая часть может быть декодирована base64, чтобы получить «что-то», где я могу проверить утверждения во 2-м (и 3-м?) Сегменте.

Я могу получить id_token назад и может разделить каждый сегмент на соответствующий объект JSON … но это совсем не безопасно 🙂

Я посмотрел на это https://github.com/firebase/php-jwt но я не уверен, какой ключ мне нужно предоставить для декодирования JWT (я знаю, что могу декодировать первый сегмент и получить kid используется для JWT, но когда у меня есть этот конкретный key объект … я не уверен, что перейти к базе данных FireBase для его декодирования? https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in

Пожалуйста, извините за мое ужасное понимание JWT: /

РЕДАКТИРОВАТЬ: Подробнее

Используя этот идентификатор TOKEN:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IklkVG9rZW5TaWduaW5nS2V5Q29udGFpbmVyIn0.
eyJleHAiOjE0NDIzNjAwMzQsIm5iZiI6MTQ0MjM1NjQzNCwidmVyIjoiMS4wIiwiaXNzIjoiaHR0cHM6Ly9s
b2dpbi5taWNyb3NvZnRvbmxpbmUuY29tLzc3NTUyN2ZmLTlhMzctNDMwNy04YjNkLWNjMzExZjU4ZDkyNS92
Mi4wLyIsImFjciI6ImIyY18xX3NpZ25faW5fc3RvY2siLCJzdWIiOiJOb3Qgc3VwcG9ydGVkIGN1cnJlbnRs
eS4gVXNlIG9pZCBjbGFpbS4iLCJhdWQiOiI5MGMwZmU2My1iY2YyLTQ0ZDUtOGZiNy1iOGJiYzBiMjlkYzYi
LCJpYXQiOjE0NDIzNTY0MzQsImF1dGhfdGltZSI6MTQ0MjM1NjQzNCwiaWRwIjoiZmFjZWJvb2suY29tIn0.
h-uiKcrT882pSKUtWCpj-_3b3vPs3bOWsESAhPMrL-iIIacKc6_uZrWxaWvIYkLra5czBcGKWrYwrAC8ZvQe
DJWZ50WXQrZYODEW1OUwzaD_I1f1HE0c2uvaWdGXBpDEVdsD3ExKaFlKGjFR2V7F-fPThkVDdKmkUDQX3bVc
yyj2V2nlCQ9jd7aGnokTPfLfpOjuIrTsAdPcGpe5hfSEuwYDmqOJjGs9Jp1f-eSNEiCDQOaTBSvr479L5ptP
XWeQZyX2SypN05Rjr05bjZh3j70ZUimiocfJzjibeoDCaQTz907yAg91WYuFOrQxb-5BaUoR7K-O7vxr2M-_
CQhoFA

Я могу декодировать сегмент заголовка eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IklkVG9rZW5TaWduaW5nS2V5Q29udGFpbmVyIn0 в {"typ":"JWT","alg":"RS256","kid":"IdTokenSigningKeyContainer"}

затем глядя на https://login.microsoftonline.com/fabrikamb2c.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_sign_in

Я знаю, что этот ключевой объект был использован

{"kid":"IdTokenSigningKeyContainer","use":"sig","kty":"RSA","e":"AQAB","n":"tLDZVZ2Eq_DFwNp24yeSq_Ha0MYbYOJs_WXIgVxQGabu5cZ9561OUtYWdB6xXXZLaZxFG02P5U2rC_CT1r0lPfC_KHYrviJ5Y_Ekif7iFV_1omLAiRksQziwA1i-hND32N5kxwEGNmZViVjWMBZ43wbIdWss4IMhrJy1WNQ07Fqp1Ee6o7QM1hTBve7bbkJkUAfjtC7mwIWqZdWoYIWBTZRXvhMgs_Aeb_pnDekosqDoWQ5aMklk3NvaaBBESqlRAJZUUf5WDFoJh7yRELOFF4lWJxtArTEiQPWVTX6PCs0klVPU6SRQqrtc4kKLCp1AC5EJqPYRGiEJpSz2nUhmAQ"}

итак … какое значение ключа я бы передал firebase?

4

Решение

На всякий случай, если кто-то хочет быстро встать и бежать и / или растерян, как я; могу ли я рекомендовать ссылку @astaykov, указанную в комментарии к вопросу

https://github.com/Azure-Samples/active-directory-b2c-php-webapp-openidconnect

Наряду с простым классом, который я создал для предоставления кода авторизации (обрабатывает получение URL-адреса единого входа, токена OAuth2 и проверку id_token с использованием внешних библиотек)

https://gist.github.com/rcosgrave/ec92938181096fd8847a38c9cc6a37d0

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]