Openid Connect (Oidc): Как Получить Токен?

В этой статье рассказывается о наиболее распространенном методе обмена токенов в потоке OpenID Connect: грантах.

[гранты] .

Обещаем, что путешествие будет увлекательным, поэтому располагайтесь поудобнее.



OpenID Connect (OIDC): Как получить токен?



Интерлюдия

Время от времени мы все сталкиваемся с ситуациями, когда нам приходится подтверждать свою личность, например, при оплате счетов, покупке билетов на самолет или даже при посещении ночных клубов.

Обычно это не проблема – паспорт есть у каждого.

Получается, что власти страны, выдавшей паспорт, подтверждают личность получившего его гражданина.

Токен — аналог паспорта в Интернете.

Он содержит:

  • информация о пользователе;
  • подпись эмитента;
  • период действия.

Именно здесь в игру вступает OpenID Connect (OIDC).

Этот протокол основан на Спецификации OAuth2 и выступает сетевым аналогом паспорта со всеми необходимыми подписями, которые запрашивают соответствующие проверяющие службы (также известные как доверяющие стороны, RP ).

Токены выпускаются и подписываются поставщиками удостоверений.

поставщики удостоверений личности ) — своего рода цифровой аналог паспортного стола.

В конечном итоге у нас есть проверяющая сторона, которая запрашивает токен, и поставщик удостоверений, который выдает эти токены.

Ну и что дальше? Как получить токен и где его подать?

Гранты

Есть много гранты , то есть способы взаимодействия с IdP для получения токена.

Большинство из них типичны и широко распространены.

Некоторые выделяются своими функциями, связанными с IdP. Информация о поддерживаемых грантах является общедоступной; вы можете получить его, отправив запрос IdP конечной точки:

  
  
   

curl ' https://your-idp.com/.

well-known/openid-configuration ' \ | jq .

grant_types_supported ["authorization_code","refresh_token"," urn:ietf:params:oauth:grant-type:device_code "]

Теперь давайте рассмотрим особенности, плюсы и минусы самых популярных грантов OIDC.

1. Предоставление кода авторизации

Грант по коду авторизации (Код авторизации) — это основная ценность протокола OIDC и основная причина, по которой он был изобретен.

В гранте участвуют все три стороны: пользователь, IdP и RP. Пользователь инициирует процесс, связываясь с конечной точкой авторизации IdP и обменивая учетные данные на.

образ токена (или, как мы его называем, код ) вместо самого токена.

Вооружившись кодом, пользователь переходит к проверяющей стороне.

Получив код, последний запрашивает токен у IdP через соответствующую конечную точку.



OpenID Connect (OIDC): Как получить токен?

Плюсы:

  • Кроме IdP, никто не видит учетные данные пользователя;
  • RP получает токен непосредственно от доверенного IdP.
Минусы:
  • Процесс привязан к браузеру пользователя, что невозможно при межмашинном взаимодействии;
  • Злоумышленники могут перехватить код;
  • Требуется трехсторонняя связь между всеми участниками процесса: пользователем, RP и IdP.


2. Ключ подтверждения для обмена кодами (PKCE)

ПКСЕ Является дальнейшим развитием концепции предыдущего гранта, предотвращающим возможность кражи кода.

В коде авторизации уязвимой ссылкой является пользователь, отправляющий код проверяющей стороне.

Откуда мы знаем, что это тот же RP? Злоумышленник может занять ее место, как это сделал волк, притворившись бабушкой в Красной Шапочке.

То есть принцип «Никому не верь» актуален всегда.

Однако идея ключа доказательства не особенно сложна.

Пользователю просто нужно сообщить RP, как гонки зашифровать код и IdP – что это такое позади зашифровать.

Вот и все!

OpenID Connect (OIDC): Как получить токен?

Вы можете получить поддерживаемые методы проверки кода, запросив IdP конечной точки:

curl ' https://your-idp.com/.

well-known/openid-configuration ' \ | jq .

code_challenge_methods_supported ["S256","plain"]



3. Неявное предоставление

Этот грант был разработан для аутентификации в одностраничных приложениях (SPA).

Это похоже на предоставление кода авторизации.

Разница лишь в том, что при перенаправлении пользователь получает в качестве GET-параметра настоящий токен, а не код (который является изображением токена, помните?).



OpenID Connect (OIDC): Как получить токен?

Плюсы:

  • SPA не требуется отправлять запрос POST к IdP (что может быть запрещено механизмом CORS).

Минусы:
  • Злоумышленники могут получить доступ к токенам в истории браузера;
  • Невозможно выдать токен обновления.

Удобство этого потока не столь существенно, поскольку оно создает огромную дыру в безопасности.

Мы рекомендуем отказаться от неявного предоставления в пользу предоставления кода авторизации.



4. Предоставление учетных данных пароля

Также пользователь может обеспечить свои учетные данные проверяющей стороне, чтобы она получила токен от его имени.

Однако раскрывать свои пароли кому-либо — не лучшая идея.

Этот грант можно использовать только в тех случаях, когда вы абсолютно уверены в RP. Однако, как уже говорилось ранее, доверять никому нельзя.



OpenID Connect (OIDC): Как получить токен?

Этот грант существует только потому, что иногда можно пожертвовать безопасностью ради удобства и при этом использовать его.

Не рекомендуется .

Подумайте дважды, прежде чем использовать его.

Плюсы:

  • Может использоваться для аутентификации приложений CLI;
  • Может использоваться для межмашинной связи;
  • Хорошо подходит для автоматизации, так как от пользователя требуется всего один запрос.

Минусы:
  • Возможна утечка данных;
  • Этот подход вынуждает пользователей делиться своими учетными данными с кем-то, кроме IdP.


5. Предоставление учетных данных клиента

Этот грант позволяет проверяющей стороне получить токен.

Что-то вроде паспорта для паспортного стола.

Пользователь не участвует в процессе.

Такой токен дает полномочия самому RP — например, на выполнение дополнительных вызовов API IdP.

OpenID Connect (OIDC): Как получить токен?

Плюсы:

  • Интересная возможность.

Минусы:
  • Этот грант не затрагивает пользователей, поэтому мы в нем особо не заинтересованы.



6. Обновить предоставление токена

Наши паспорта действительны в течение многих лет, но представьте себе паспорт, срок действия которого истекает через 5 или 10 минут. В реальной жизни это было бы адом, и нам пришлось бы получать новый паспорт каждый раз, когда возникает необходимость подтвердить свою личность (например, при покупке авиабилетов).

Авиакомпаниям всегда нужны самые свежие фотографии и данные.

Именно поэтому срок действия такой короткий.

По этой же причине процедура обновления должна быть максимально простой, чтобы пользователи не теряли рассудок из-за бюрократии и задержек.

То есть это должно выглядеть примерно так: «Здравствуйте! Это снова я.

Пожалуйста, пришлите мне новый паспорт».

К счастью, такая процедура существует и называется Обновить токен .

Этот специальный токен можно обменять на новый идентификационный токен без взаимодействия с пользователем.



OpenID Connect (OIDC): Как получить токен?

Плюсы:

  • Удобство;
  • Токен обновления — это токен длительного действия, который отправляется исключительно IdP, что является наиболее безопасным способом получения токена.

Минусы:
  • Его можно использовать только для продления срока действия токена;
  • Требуется доступ к IdP.


7. Предоставление авторизации устройства

«Хорошо, — скажете вы, — а если мне понадобится паспорт на холодильник, микроволновку или пылесосЭ» Ура! Протокол OIDC широко используется в Интернете вещей.

Единственная сложность – как получить токен, если на холодильнике нет браузера или терминала? Во-первых, устройство должно знать URL-адрес, чтобы инициировать аутентификацию.

Для этого отправьте запрос на конечную точку обнаружения поставщика удостоверений (IdP):

curl ' https://your-idp.com/.

well-known/openid-configuration ' \ | jq .

device_authorization_endpoint https://your-idp.com/oauth2/v1/device/authorize

По запросу конечной точки авторизации устройства поставщик удостоверений сгенерирует код устройства вместе со ссылкой для подтверждения его аутентификации.

Эта ссылка будет отправлена на устройство.

С этого момента устройство запускается одновременно:

  • Отправлять запросы с кодом устройства на соответствующую конечную точку, чтобы обменять его на токен;
  • Отображение ссылки для подтверждения на экране.

Как только пользователь нажмет на ссылку подтверждения, устройство получит токен.



OpenID Connect (OIDC): Как получить токен?

Плюсы:

  • Сорт! Устройства могут быть аутентифицированы!
Минусы:
  • Отныне вам придется покупать исключительно дорогую «умную» бытовую технику.



Заключение

В этой статье кратко рассматриваются наиболее распространенные гранты OIDC и типичные сценарии применения.

TLDR: в 99% случаев достаточно предоставления кода авторизации, дополненного PKCE и токенами обновления.

Расширяемость протокола OIDC позволяет создавать собственные гранты и заявлять об их поддержке при обращении к конечной точке обнаружения.

Я намеренно проигнорировал СИБА — интересный, многообещающий, но довольно сырой грант, который пока не поддерживается популярными провайдерами OIDC, такими как Okta или Auth0. Надеюсь, эта статья помогла вам лучше понять процесс аутентификации в целом и процедуру получения токена в частности.

Оставайтесь на связи!

P.S.

Эта же статья доступна и на английском языке в блоге Флэнта .

Там вы также можете подписаться на технический контент от наших инженеров, которым можно легко поделиться с ИТ-коллегами по всему миру.

Читайте также в нашем блоге:

  • «Иллюстрированное руководство по OAuth и OpenID Connect» ;
  • «Азбука безопасности в Kubernetes: аутентификация, авторизация, аудит» ;
  • «Пользователи и авторизация RBAC в Kubernetes» .

Теги: #информационная безопасность #Сетевые технологии #Системное администрирование #ИТ-стандарты #oidc #аутентификация #oauth2 #openid Connect
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.