Русский
  • перенаправление uri
  • обратный вызов
  • код авторизации
  • поток кода
  • oidc
  • pkce

Понимание перенаправления URI и потока авторизации в OpenID Connect (OIDC)

Давайте подробнее рассмотрим перенаправление URI, так как это критический элемент безопасности в процессе аутентификации OIDC.

Charles
Charles
Developer

Что такое перенаправление URI?

Переадресация URI, также известная как URL ответа, является критическим элементом безопасности в процессе аутентификации OIDC. Она указывает URL, по которому пользователи перенаправляются после успешной авторизации через поставщика OIDC. Более важно, это то место, где ваше приложение получает код авторизации, необходимый для получения токенов.

Посмотрите вики страницы Redirect URI для получения дополнительной информации.

Что такое поток кода авторизации?

Поток кода авторизации (определён в OAuth 2.0 RFC 6749, раздел 4.1) является основным методом аутентификации в OIDC. Он включает обмен кода авторизации на токен доступа и, при необходимости, обновляющий токен. Этот поток подходит для приложений, которые могут безопасно хранить клиентский секрет, таких как серверные веб-приложения.

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

Как работает перенаправление URI в потоке кода авторизации?

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

Вот как вы можете зарегистрировать ссылку для переадресации URI в Logto Console: redirect-uri

При инициировании входа в систему:

  1. Запрос авторизации: Ваше приложение направляет пользователя к конечной точке авторизации поставщика OIDC, включая параметры, такие как client_id, response_type, scope и redirect_uri.
  2. Аутентификация пользователя: Пользователь аутентифицируется у поставщика OIDC.
  3. Доставка кода авторизации: После успешной аутентификации поставщик OIDC перенаправляет пользователя на указанный redirect_uri, включая код авторизации в виде параметра запроса.

Поставщик OIDC проверяет redirect_uri на соответствие списку предварительно зарегистрированных URI. Если имеется несоответствие, будет возвращена ошибка invalid_redirect_uri, что повышает безопасность, предотвращая получение токенов неавторизованными конечными точками.

Лучшие практики для перенаправлений URI

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

Если у вас есть одностраничное веб-приложение, работающее на https://my-app.com, то обычно перенаправление URI будет указано как https://my-app.com/callback

Или, если это собственное мобильное приложение, то перенаправление URI обычно начинается с пользовательской схемы, например com.company://myapp/callback

Другие лучшие практики включают:

  • Избегайте символов подстановки: не используйте шаблоны подстановки в перенаправлениях URI. Явно укажите все разрешенные URI, чтобы предотвратить несанкционированный доступ.
  • Полное соответствие: убедитесь, что перенаправление URI точно соответствует зарегистрированному у поставщика OIDC. Даже конечный слэш может вызвать несоответствие.

Обработка обратного вызова при входе

Чтобы обработать код авторизации, возвращенный вашему redirect_uri, выполните следующие шаги:

  1. Извлечение кода авторизации: Получите параметр кода из строки запроса перенаправления URI.

  2. Обмен кода авторизации на токены: Составьте POST-запрос к точке конечного действия токена поставщика OIDC, включая:

    • client_id: ID вашего приложения у поставщика OIDC
    • code: код авторизации, полученный из перенаправления URI
    • code_verifier: случайная строка, сгенерированная на клиенте
    • redirect_uri: тот же URI, что использовался в запросе авторизации
    • grant_type: тип доступа, обычно authorization_code

Образец запроса обмена токенов на JavaScript

Упростите процесс обмена кода в Logto, используя Logto SDK

Logto SDK - это комплект для разработки, написанный на определённом языке программирования или фреймворке, например, Logto React SDK, Next.js SDK и Swift SDK. Использование SDK может значительно упростить процесс, просто вызвав одну или две функции.

Вот пример компонента React "Callback" с использованием официального React SDK Logto:

Руководства по интеграции SDK можно найти в документации по быстрой настройке Logto.

Обзор: почему важно освоить перенаправление URI в OIDC

Понимание перенаправлений URI в OIDC с потоком кода авторизации имеет решающее значение для обеспечения безопасности и оптимизации процессов аутентификации. Путём регистрации доверенных перенаправлений URI и эффективной обработки обратных вызовов при входе вы можете обеспечить бесшовный и безопасный опыт для своих пользователей, в то время как упрощаете свои усилия по разработке с помощью Logto SDK.