Статьи

Повысьте OAuth 2.0 и OpenID Connect с помощью хуков

Разработчики знают, что OAuth 2.0 и OpenID Connect (OIDC) являются мощными инструментами для добавления аутентификации и авторизации в современные веб-приложения.

Теперь вы можете заставить эти стандарты делать еще больше для вас с помощью новых встроенных крючков Okta . Этот пост покажет вам, как использовать встроенные перехватчики для передачи информации о токенах, которые вы получаете от Okta через OIDC и OAuth.

Сначала вы установите приложение OIDC в ​​Okta, чтобы увидеть типы токенов, которые вы получите. Затем вы настроите приложение Spring Boot API, которое позволит вам регистрировать ваши любимые сорта пива (это основано на предыдущем посте моего друга и коллеги, Мэтта Рейбла, который увлечен хорошим пивом). Это приложение Spring Boot также имеет конечные точки API для регистрации перехватчиков токенов в Okta и для обслуживания запросов на исправление токенов из Okta. К тому времени, как вы закончите, вы увидите, что ваши любимые сорта пива теперь включены в полезную нагрузку токена благодаря зарегистрированным хукам.

Чтобы подготовиться к практическим частям этого поста, настройтесь на следующее:

  • Создайте бесплатную организацию разработчиков Okta по адресу https://developer.okta.com/signup/.
  • Установите HTTPie , современную замену curl для взаимодействия с конечными точками API позже
  • Установите ngrok , приложение, которое позволяет публичный доступ к локально работающему серверу
  • Необязательно: Создайте бесплатную учетную запись Heroku по адресу https://signup.heroku.com/.

Для начала давайте сделаем шаг назад и поговорим немного больше о OIDC и OAuth.

Трехминутный обзор OpenID Connect и OAuth 2.0

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

Такие сайты, как Yelp, начали получать доступ к контактной информации, которая была у вас в контактах Google. Итак, Yelp, естественно, собрал ваше имя пользователя и пароль Google, чтобы он мог получить доступ к вашим контактам. Вы дали Yelp свое разрешение, так что все было хорошо, да? Нет! С вашим именем пользователя и паролем Yelp может получить доступ к вашей электронной почте, вашим документам — всему, что у вас было в Google — не только вашим контактам. И что еще хуже, Yelp пришлось хранить ваш пароль таким образом, чтобы он мог использовать его в виде открытого текста, и не было стандартного способа отозвать ваше согласие на Yelp для доступа к вашей учетной записи Google.

Нам нужна была структура авторизации, которая позволяла бы вам предоставлять доступ к определенной информации без вашего пароля. Кий OAuth.

Используйте OAuth 2.0 для делегированной авторизации

Три ревизии спустя, мы находимся в OAuth 2.0 (до него было 1.0 и 1.0a) и все в порядке с миром. Теперь приложение, такое как Yelp (a Client Application), может запросить Access Tokenуслугу, такую ​​как Google (an Authorization Server). Вы (the Resource Owner) входите в Google со своими учетными данными и даете ConsentYelp доступ к вашим контактам (и только вашим контактам). Access TokenYelp обращается к API контактов Google Resource Serverи получает ваши контакты. Yelp никогда не видит ваш пароль и никогда не имеет доступа ни к чему большему, чем вы согласились. И вы можете отозвать свое согласие в любое время.

Используйте OpenID Connect для идентификации

В этом новом мире согласия и авторизации не хватало только одного: идентичности. Cue OpenID Connect. OIDC — это тонкий слой поверх OAuth 2.0, который представляет токен нового типа: токен идентификации. В этих криптографически подписанных токенах в формате JWT содержится информация об аутентифицированном пользователе. Это открыло дверь на новый уровень взаимодействия и единого входа.

OAuth (и, соответственно, OIDC) используют ряд определенных Flowsдля управления взаимодействиями между Client App, Authorization Serverи Resource Server. В этом посте вы сосредоточитесь на Authorization Code Flow. Этот поток предназначен для запуска из вашего браузера и выглядит так:

  1. Yelp хочет получить доступ к вашим контактам. Он представляет собой кнопку, чтобы связать ваши контакты Google.
  2. Когда вы нажимаете кнопку, вы перенаправляетесь в Google, где вы входите под своим именем пользователя и паролем (если вы еще не вошли в систему).
  3. Google показывает вам экран, сообщающий, что Yelp хотел бы получить доступ только для чтения к вашим контактам.
  4. Как только вы дадите свое согласие, Google перенаправит обратно в Yelp через ваш браузер временный код (называемый кодом авторизации).
  5. Используя этот код, Yelp связывается с Google, чтобы обменять его на токен доступа
  6. Google проверяет код и, если все проверено, выдает токен доступа с ограниченными возможностями (доступ только для чтения к вашим контактам) для Yelp
  7. Затем Yelp представляет токен доступа в API контактов Google.
  8. API контактов Google проверяет токен и, если запрос соответствует возможностям, указанным токеном, возвращает ваш список контактов в Yelp

Настройте свою организацию Okta для OIDC и OAuth 2.0

В этом разделе вы собираетесь создать приложение OpenID Connect в Okta. Затем вы отработаете приложение OIDC с помощью небольшого приложения OIDC для игровой площадки, которое я создал на Heroku. Кодирование не требуется! (Что будет позже).

После входа в свою организацию Okta перейдите в Приложения из меню верхнего уровня. Нажмите: Добавить приложение . Нажмите на третий ящик с надписью над Web и нажмите кнопку Далее .

Введите следующее:

поле стоимость
имя OIDC Beers
URI перенаправления входа https://okta-oidc-fun.herokuapp.com/flow_result
Тип гранта разрешен Проверьте код авторизации и неявный (гибридный)

Нажмите Готово .

Примечание. В настоящее время наилучшим руководством для OAuth 2.0 (как описано здесь ) является НЕ использовать неявный поток. Мы используем его здесь в демонстрационных целях.

Прокрутите вниз и скопировать Client IDи Client secretзначение. Вы будете нуждаться в этом позже.

OIDC Fun на Heroku

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

Перейдите на https://okta-oidc-fun.herokuapp.com

Вы увидите страницу с формой и несколькими кнопками переключения. Изначально он указывает на мою организацию Okta. Но вы можете изменить его на свою организацию Okta, заполнив форму.

Обновите значения в соответствии со следующим:

поле стоимость
Okta Org полностью квалифицированный домен для вашей организации (НЕТ https: //)
ID сервера авторизации дефолт
Идентификатор клиента OIDC Идентификатор клиента, который вы скопировали при создании приложения OIDC
response_type DESELECT код , выберите id_token и токен

Прокрутите вниз и нажмите на ссылку. Откроется новая вкладка, где вы можете пройти аутентификацию в своей организации Okta. Затем вы будете перенаправлены обратно, где увидите идентификационный токен и токен доступа. Нажмите Проверить идентификатор токена, и вы увидите полезную нагрузку, закодированную в этот токен.

Вы уже видели, какие токены может генерировать ваше приложение OpenID Connect в Okta.

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

Оставьте эту вкладку браузера открытой. Вы будете использовать токен доступа чуть позже.

Настройте API любимого пива

Зайдите и получите исходный код этого поста с GitHub .

Это приложение Spring Boot, которое использует Okta Spring Boot Starter для легкой интеграции с OpenID Connect и OAuth 2.0.

Он использует базу данных H2 в памяти и Spring Data JPA для простого объектно-реляционного отображения. Он также использует отличный проект Lombok, потому что — Кто любит писать геттеры и сеттеры?

В приложении есть API для указания вашего любимого пива, а также API для обработки входящего запроса ловушки от Okta и возврата ответа на патч ID токена.

В папке src / main / resources вы увидите application.sample.ymlфайл. Скопируйте это application.ymlв ту же папку.

Вам нужно настроить application.ymlфайл, используя значения, которые вы собрали из настроек, которые мы сделали выше. Это включает в себя эмитент , ClientId и clientSecret значение. Кроме того, можно при необходимости изменить idи passwordзначение , что вы хотите. Эти значения используются позже с API-интерфейсом Hooks. Если у вас есть эти наборы, вы можете запустить приложение так:


Оболочка