Ограничить доступ к ресурсу на основе типа предоставления в дополнение к области действия - PullRequest
1 голос
/ 10 января 2020

Насколько я понимаю: -

  • Области, которые может получить oauth-клиент, регистрируются у клиента на сервере авторизации.

  • Типы разрешений, которые может использовать клиент, регистрируются для клиента на сервере авторизации.

  • Ресурсы настроены для разрешения запросов, содержащих токены доступа, связанные с определенными областями.

Существует ли механизм в OAuth ванили, в котором тип ограничения в дополнение к областям используется при ограничении конечной точки?

Например, задан Клиент A с областями действия = организации, изображения и типы предоставления = учетные данные клиента, код авторизации:

(при создании токена)

  • Для клиента А для получения токена доступа для области «организации», только учетные данные клиента предоставляют можно использовать тип.

  • Для клиента A для получения токена доступа для области «images» можно использовать только тип предоставления кода авторизации.

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

  • Когда вызывается конечная точка / images с токеном доступа для хранения ожидаемого Область 'images' разрешает запрос, только если для получения токена доступа использовался тип предоставления кода авторизации (сбой, если использовался любой другой тип предоставления).

Насколько я знаю Области ограничены только тем, что зарегистрировано для клиента.

Единственный способ, которым я могу думать о достижении вышеизложенного, - это иметь две клиентские регистрации (например, b, c) для одного и того же фактического клиента (A ) и настройте клиент 'b' для типа предоставления учетных данных клиента и области организации и клиента 'c' для типа предоставления кода авторизации и области изображений.

Обновление * 105 1 *

В параметрах OID C можно добавить одну область для добавления области ролей, что будет означать, что заявки о ролях будут добавлены в маркер доступа. Затем можно проверить токен доступа, чтобы определить, является ли роль третьей стороной (предоставление учетных данных клиента) или пользователем (предоставление кода авторизации). Мне все равно было бы интересно узнать, есть ли что-то специально встроенное в oauth для ограничения по типу гранта.

1 Ответ

1 голос
/ 10 января 2020

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

Я бы всегда настраивал разные клиенты OAuth для разных типов грантов - поскольку это разные логические клиенты, и они никогда не могут совместно использовать сеанс.

Несколько возможных вариантов:

  • ВАРИАНТ 1. Используйте несколько API-интерфейсов, каждый из которых имеет разную аудиторию. и настройте разные аудитории для разных клиентов OAuth, если это поддерживается вашим сервером авторизации.

  • ОПЦИЯ 2. Конечная точка API может потенциально проверять идентификатор клиента в токенах доступа по списку разрешенные идентификаторы клиента - хотя это не очень хороший долгосрочный вариант

  • ВАРИАНТ 3. Используйте OAuth только для идентификации вызывающего абонента, а затем найдите права для вызывающего абонента, которые хранятся и управляются в Данные Приложения. Это почти всегда лучший долгосрочный вариант.

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

Мне нравится ваша идея использования ролей, и из опыта я бы управлял ими следующим образом:

  • Выполните авторизацию OAuth высокого уровня сначала с помощью областей действия и т. д. c
  • Определение вызывающего абонента по заявкам токена
  • Поиск роли (-ий) вызывающего в данных вашего приложения
  • Применение правил авторизации роли в ваш логин API c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...