OAuth2: что такое «клиент» - PullRequest
0 голосов
/ 04 июня 2018

В контексте OAuth2 я хотел бы точно знать, какой компонент (ы) моего приложения считается "клиентом".

Ниже приведены соответствующие примеры из rfc6749 * 1004.*


раздел 1.1:

client

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

раздел 2.1:

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


Сценарий 1:

  • Мое приложение (A) состоит из внешнего интерфейса на основе браузера (компонент A1) и внутреннего API (компонент A2).
  • Задняя часть-end (A2) получает токен доступа ( Предоставление кода авторизации ) с сервера авторизации Google (G1) для доступа к серверу ресурсов Google (G2)

Что из следующегоутверждения верны / правильны?

  1. «клиент» относится к (A).(A) является конфиденциальным и состоит из общедоступного компонента (A1) и конфиденциального компонента (A2).
  2. «клиент» относится к (A2).(A2) является конфиденциальным клиентом.
  3. Неправильно называть (A1) клиентом, поскольку (A1) не отправляет запросы защищенного ресурса на (G2).

Сценарий 2 :

  • Мое приложение (A) состоит из внешнего интерфейса на основе браузера (компонент A1) и внутреннего интерфейса API (компонент A2).
  • Интерфейс на основе браузера (A1) получает токен доступа ( Implicit Grant ) от сервера авторизации Google (G1) для доступа к серверу ресурсов Google (G2)

Какое из следующих утверждений является / является правильным?

  1. «клиент» относится к (A).(A) является общедоступным клиентом и состоит из общедоступного компонента (A1) и конфиденциального компонента (A2).
  2. «клиент» относится к (A1).(A1) является общедоступным клиентом.
  3. Неправильно называть (A2) клиентом, поскольку (A2) не отправляет запросы защищенного ресурса к (G2).

1 Ответ

0 голосов
/ 05 июня 2018

В сценарии 1 компонент A1 не является клиентом, поскольку он не имеет доступа к защищенным ресурсам из Google.Но компонент А2 является клиентом.И это защищенный клиент, поскольку он не предоставляет учетные данные клиента владельцу ресурса (просто пользователю приложения).С вашей конечной точки, и А1, и А2 - это единое целое (одно приложение).Но это не относится к серверу авторизации.

В сценарии 2 компонент A1 получает токены и также потребляет ресурсы Google.Таким образом, с точки зрения сервера авторизации, A1 является клиентом.И это публичный клиент, так как он не может защитить учетные данные клиента, если таковые имеются (он основан на браузере.!).Как и прежде, с вашей стороны, A1 и A2 - это единое целое.

Теперь подумайте о сценарии, в котором вам нужно использовать сервисы Google из компонентов A1 и A2.Теперь у вас есть возможность зарегистрировать двух клиентов, потому что с точки зрения сервера авторизации он видит две разные сущности.Один может защитить учетные данные, а другой нет.Тем самым вы полностью используете типы клиентов OAuth.Для этого авторизуйтесь.Сервер может облегчить некоторые функции (которые я также не полностью осознаю).Это может быть что-то вроде возможности зарегистрировать два URL перенаправления на одного клиента.Или использовать одну и ту же идентификационную информацию клиента для конфиденциального и публичного клиента.

...