Когда клиент просит сервер ресурсов получить защищенный ресурс с токеном доступа OAuth 2.0, как этот сервер проверяет токен? Протокол токенов обновления OAuth 2.0?
Когда клиент просит сервер ресурсов получить защищенный ресурс с токеном доступа OAuth 2.0, как этот сервер проверяет токен? Протокол токенов обновления OAuth 2.0?
Ответы:
Обновление ноябрь 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.
Запрос:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
Отвечать:
{
"audience":"8819981768.apps.googleusercontent.com",
"user_id":"123456789",
"scope":"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
"expires_in":436
}
Microsoft - Oauth2 проверь авторизацию
Github - Oauth2 проверить авторизацию
Запрос:
GET /applications/:client_id/tokens/:access_token
Отвечать:
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abc123",
"app": {
"url": "http://my-github-app.com",
"name": "my github app",
"client_id": "abcde12345fghij67890"
},
"note": "optional note",
"note_url": "http://optional/note/url",
"updated_at": "2011-09-06T20:39:23Z",
"created_at": "2011-09-06T17:26:27Z",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "somehexcode",
"url": "https://api.github.com/users/octocat"
}
}
Войти через Amazon - Руководство разработчика (декабрь 2015 г., стр. 21)
Запрос :
https://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
Отклик :
HTTP/l.l 200 OK
Date: Fri, 3l May 20l3 23:22:l0 GMT
x-amzn-RequestId: eb5be423-ca48-lle2-84ad-5775f45l4b09
Content-Type: application/json
Content-Length: 247
{
"iss":"https://www.amazon.com",
"user_id": "amznl.account.K2LI23KL2LK2",
"aud": "amznl.oa2-client.ASFWDFBRN",
"app_id": "amznl.application.436457DFHDH",
"exp": 3597,
"iat": l3ll280970
}
Обновленная информация об ответе @Scott T. Интерфейс между сервером ресурсов и сервером авторизации для проверки токена был стандартизирован в IETF RFC 7662 в октябре 2015 года, см. Https://tools.ietf.org/html/rfc7662 . Пример проверки вызова будет выглядеть так:
POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer 23410913-abewfq.123483
token=2YotnFZFEjr1zCsicMWpAA
и пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"client_id": "l238j323ds-23ij4",
"username": "jdoe",
"scope": "read write dolphin",
"sub": "Z5O3upPC88QrAjx00dis",
"aud": "https://protected.example.net/resource",
"iss": "https://server.example.com/",
"exp": 1419356238,
"iat": 1419350238,
"extension_field": "twenty-seven"
}
Конечно, принятие поставщиками и продуктами должно произойти со временем.
scope
параметром запроса, значение которого содержит разделенный пробелами список областей
Спецификация OAuth 2.0 не определяет часть. Но может быть несколько вариантов:
Когда сервер ресурсов получает токен в заголовке Authz, он вызывает API-интерфейс validate / introspect на сервере Authz для проверки токена. Здесь сервер Authz может проверить его либо с помощью DB Store, либо путем проверки подписи и определенных атрибутов. Как часть ответа, он декодирует токен и отправляет фактические данные токена вместе с оставшимся временем истечения.
Authz Server может зашифровать / подписать токен с помощью закрытого ключа, после чего publickey / cert может быть передан Resource Server. Когда сервер ресурсов получает токен, он либо дешифрует / проверяет подпись для проверки токена. Вынимает содержимое и обрабатывает токен. Затем он может предоставить доступ или отклонить.
Спецификации OAuth v2 указывают:
Атрибуты токена доступа и методы, используемые для доступа к защищенным ресурсам, выходят за рамки данной спецификации и определяются сопутствующими спецификациями.
Мой сервер авторизации имеет конечную точку веб-службы (SOAP), которая позволяет серверу ресурсов знать, действителен ли access_token.