Как проверить токен доступа OAuth 2.0 для сервера ресурсов?
147
Когда клиент просит сервер ресурсов получить защищенный ресурс с токеном доступа OAuth 2.0, как этот сервер проверяет токен? Протокол токенов обновления OAuth 2.0?
Предполагается, что сервер сможет проверять токен, который он сам ранее выпустил ... Обычно это будет поиск в базе данных или крипто (самозаверяющие токены).
Тило
Понимаю. Как насчет этого случая, владелец ресурса WS и клиент WS находятся на разных устройствах?
Ack
5
Вы имеете в виду службу аутентификации и службу ресурсов? (клиент / потребитель всегда будет на другом устройстве и сам не сможет проверить токены). В этом случае вы можете использовать токены обновления, которые «дороги» для проверки (это может сделать только сервер авторизации), но долгоживущие и токены доступа, которые часто истекают и могут быть проверены в автономном режиме.
Обновление ноябрь 2015: согласно Hans Z. ниже - теперь это действительно определено как часть RFC 7662 .
Оригинальный ответ: спецификация OAuth 2.0 ( RFC 6749 ) не дает четкого определения взаимодействия между сервером ресурсов (RS) и сервером авторизации (AS) для проверки токена доступа (AT). Это действительно зависит от формата / стратегии токенов AS - некоторые токены являются автономными (например, веб-токены JSON ), в то время как другие могут быть похожи на cookie-файл сеанса в том смысле, что они просто ссылаются на информацию, хранящуюся на стороне сервера в AS.
Скотт, я ищу образец, который продемонстрировал бы Предоставление клиентских учетных данных с Rest API, защищенным локальным сервером ресурсов и PingFederate в качестве сервера проверки подлинности. Затем локальный сервер ресурсов вызовет конечную точку проверки. Вы сталкивались с чем-нибудь подобным?
JavaHead
@JavaHead еще раз, это то, на что вы должны ссылаться на игровую площадку PingFederate OAuth. Он демонстрирует как тип предоставления клиентских учетных данных, так и проверку токена доступа сервером ресурсов.
Скотт Т.
В случае маркера доступа JWT я бы предположил, что вы обычно не захотите обращаться к конечной точке самоанализа AS для каждого входящего запроса к RS. В каком случае достаточно ли проверки RS подписи токена и области действия? Или, возможно, RS мог бы кэшировать ответы самоанализа от AS в течение некоторого времени?
@gustavodiazjaimes Это вообще не объясняет, как серверная сторона распознает назначенный идентификатор пользователя из токена.
user2284570
22
Я не понимаю всех голосов. Это не похоже на ответ на вопрос.
Дункан Джонс
Кто-нибудь знает, имеет ли Azure Active Directory аналогичную конечную точку для проверки допустимости выданного токена?
user180940
2
Другими словами, катите свои собственные.
AndroidDev
51
Обновленная информация об ответе @Scott T. Интерфейс между сервером ресурсов и сервером авторизации для проверки токена был стандартизирован в IETF RFC 7662 в октябре 2015 года, см. Https://tools.ietf.org/html/rfc7662 . Пример проверки вызова будет выглядеть так:
Если вы используете OoenId Connect, мы не должны использовать openid способ использования токена id для проверки токена доступа: openid.net/specs/…
adnan kamili
1
@Renan: чтобы соответствовать тому, как запрашиваются области в запросе авторизации, то есть с scopeпараметром запроса, значение которого содержит разделенный пробелами список областей
Hans Z.
4
Пожалуйста, не используйте слово «стандартизированный», если что-то не было официально принято руководящим органом. IETF RFC 7662 по состоянию на февраль 2018 года четко указывает, что это «предложение».
AndroidDev
1
@adnankamili Нет такой вещи как «предложение». К тому времени, когда документ становится RFC, он уже является «предлагаемым стандартом», который имеет значительный вес. Сам по себе OAuth 2.0 все еще является «предлагаемым стандартом», поэтому я не уверен, что вы пытаетесь сделать.
Pace
15
Спецификация OAuth 2.0 не определяет часть. Но может быть несколько вариантов:
Когда сервер ресурсов получает токен в заголовке Authz, он вызывает API-интерфейс validate / introspect на сервере Authz для проверки токена. Здесь сервер Authz может проверить его либо с помощью DB Store, либо путем проверки подписи и определенных атрибутов. Как часть ответа, он декодирует токен и отправляет фактические данные токена вместе с оставшимся временем истечения.
Authz Server может зашифровать / подписать токен с помощью закрытого ключа, после чего publickey / cert может быть передан Resource Server. Когда сервер ресурсов получает токен, он либо дешифрует / проверяет подпись для проверки токена. Вынимает содержимое и обрабатывает токен. Затем он может предоставить доступ или отклонить.
Атрибуты токена доступа и методы, используемые для доступа к защищенным ресурсам, выходят за рамки данной спецификации и определяются сопутствующими спецификациями.
Мой сервер авторизации имеет конечную точку веб-службы (SOAP), которая позволяет серверу ресурсов знать, действителен ли access_token.
Ответы:
Обновление ноябрь 2015: согласно Hans Z. ниже - теперь это действительно определено как часть RFC 7662 .
Оригинальный ответ: спецификация OAuth 2.0 ( RFC 6749 ) не дает четкого определения взаимодействия между сервером ресурсов (RS) и сервером авторизации (AS) для проверки токена доступа (AT). Это действительно зависит от формата / стратегии токенов AS - некоторые токены являются автономными (например, веб-токены JSON ), в то время как другие могут быть похожи на cookie-файл сеанса в том смысле, что они просто ссылаются на информацию, хранящуюся на стороне сервера в AS.
В рабочей группе OAuth обсуждались вопросы создания стандартного способа связи RS с AS для проверки AT. Моя компания (Ping Identity) предложила один из таких подходов для нашего коммерческого OAuth AS (PingFederate): https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn156400N057_100_102 . 10072502502507250250250250250250250250250250250250250210250250210250200000000000000000000 Для этого используется взаимодействие на основе REST, которое очень дополняет OAuth 2.0.
источник
Путь Google
Проверка токена Google Oauth2
Запрос:
Отвечать:
Microsoft путь
Microsoft - Oauth2 проверь авторизацию
Github путь
Github - Oauth2 проверить авторизацию
Запрос:
Отвечать:
Амазонка
Войти через Amazon - Руководство разработчика (декабрь 2015 г., стр. 21)
Запрос :
Отклик :
источник
Обновленная информация об ответе @Scott T. Интерфейс между сервером ресурсов и сервером авторизации для проверки токена был стандартизирован в IETF RFC 7662 в октябре 2015 года, см. Https://tools.ietf.org/html/rfc7662 . Пример проверки вызова будет выглядеть так:
и пример ответа:
Конечно, принятие поставщиками и продуктами должно произойти со временем.
источник
scope
параметром запроса, значение которого содержит разделенный пробелами список областейСпецификация OAuth 2.0 не определяет часть. Но может быть несколько вариантов:
Когда сервер ресурсов получает токен в заголовке Authz, он вызывает API-интерфейс validate / introspect на сервере Authz для проверки токена. Здесь сервер Authz может проверить его либо с помощью DB Store, либо путем проверки подписи и определенных атрибутов. Как часть ответа, он декодирует токен и отправляет фактические данные токена вместе с оставшимся временем истечения.
Authz Server может зашифровать / подписать токен с помощью закрытого ключа, после чего publickey / cert может быть передан Resource Server. Когда сервер ресурсов получает токен, он либо дешифрует / проверяет подпись для проверки токена. Вынимает содержимое и обрабатывает токен. Затем он может предоставить доступ или отклонить.
источник
Спецификации OAuth v2 указывают:
Мой сервер авторизации имеет конечную точку веб-службы (SOAP), которая позволяет серверу ресурсов знать, действителен ли access_token.
источник