OAuth v2 между аутентификацией и сервером ресурсов

У меня возникли проблемы с пониманием того, как работает OAUTH-v2.

OAuth version 2 spec гласит:

  1. Доступ к защищенным ресурсам

    Клиент обращается к защищенному ресурсов путем представления доступа
    токен серверу ресурсов. сервер ресурсов ДОЛЖЕН подтвердить токен доступа и истек срок его действия. запрошенный ресурс. Методы используемый сервером ресурсов для
    подтвердите токен доступа (а также любые ответы об ошибках) за пределами объем этой спецификации, но обычно включает взаимодействие или координация между ресурсами сервер и авторизация
    сервер
    .

Как это взаимодействие между сервером ресурсов и сервером авторизации работает на практике?

  • Как сервер ресурсов определить, что токен доступа получено?
  • Как ресурсный сервер извлекает разрешенные scope из токена, чтобы узнать, должен ли предоставляться доступ к определенному ресурсу? Является ли область, закодированная в токен доступа, или сервер ресурсов сначала должен связаться с сервером авторизации?
  • Как установлено доверие между сервером ресурсов и сервером авторизации?

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

Может ли кто-нибудь привести примеры атрибутов токена?

Ответ 1

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

Например, у вас есть один сервер, управляющий аутентификацией и доступом, и набор дискретных служб, каждый со своими серверами, обслуживающими вызовы API? Или у вас есть только один ящик с одним веб-сервером, который обрабатывает аутентификацию/авторизацию и вызовы API?

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

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

Автономные токены длиннее, но обеспечивают гораздо лучшую производительность по запросу. Тем не менее, у них есть цена - вы не можете действительно отменить их, пока они все еще действительны (не истекли). По этой причине самодостаточные токены должны быть очень короткими (независимо от того, что приемлемо для вас, чтобы оставить доступ открытым после его отмены), например, многие сайты используют один час), с токеном обновления в течение года или более для получения новых токенов.

Ответ 2

Одним из примеров API-интерфейса для сервера авторизации является тот, который находится в Сайт разработчиков Google.
Он не определяет формат токена доступа, хотя ответ кажется довольно универсальным.