У меня есть сценарий, где OIDC кажется подходящим: мобильное приложение, в котором пользователям нужно будет получать некоторые частные данные с сервера. Я читал учебники OIDC such as this one, и я думаю, что я их понял, но по-прежнему остается решающее окончательное «отверстие» в глобальной картине.Что такое клиентское приложение, которое предполагается использовать с JWT, полученным через OpenID Connect?
Во всяком случае, если я правильно понял код потока РСИН, это краткое резюме взаимодействий:
- Мобильное приложение связывается с конечной авторизации ОИС, указав в
scope
, который нам нужен в электронная почта пользователя. Он обеспечит какredirect_uri
указатель на простой веб-сервер, запущенный в самом мобильном приложении. - OIP свяжется с мобильным приложением через
redirect_uri
и предоставит ему код авторизации. - Мобильное приложение теперь свяжется с конечной точкой маркера OIP и предоставит ему код авторизации, полученный на шаге 2. Он также предоставит OIP
redirect_uri
, где должен быть отправлен ответ. - OIP свяжется с приложением через
redirect_uri
и предоставит ему подписанный JWT с запросом (электронной почтой), который мы просили.
И здесь заканчиваются учебные пособия. Я предполагаю, что теперь подразумевается, что мобильное приложение отправит JWT, полученный на шаге 4, на мой сервер. Однако как сервер должен знать, что JWT действителен? Несомненно, он подписан OIP, но сервер должен иметь жесткий список открытых ключей OIP для проверки JWT? Эти последние важнейшие шаги, кажется, отсутствуют в учебниках по OIDC, которые я нашел ...
Спасибо за Ваш ответ и коррекции относительно точки 4. Тем не менее, вы не обращались мой фактический вопрос: после того, как мобильное приложение проверяет токен и отправляет его на мой сервер, как сервер должен доверять ему? –
Вы должны проверить подпись маркера, используя открытый ключ, предоставленный сервером (или секрет, если используете HMAC), а затем проверьте содержимое некоторых требований. Проверка может быть выполнена на стороне клиента или сервера. Обычно проверка подлинности выполняется на стороне сервера, чтобы избежать распространения ключей к клиентам. Если подпись правильная, вы можете доверять, что токен был выпущен Эмитентом, и он не был изменен. Также обратите внимание, что если вы извлекаете токен с доверенным соединением TLS, то проверка сигнатуры может быть опущена – pedrofb