Как реализовать разрешения для каждого клиента в приложении OAuth с использованием JWT? - PullRequest
0 голосов
/ 08 мая 2019

Я уже давно занимаюсь этим вопросом и пришел к выводу, что я полностью лаю не на том дереве.

Чтобы получить представление о том, что я пытаюсь сделать, я собрал API-оболочку, чтобы RESTful раскрыть основные функциональные возможности системы.

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

например.

  • example.com / государственный / v1 /
  • example.com / частный / v1 /
  • example.com / админ / v1 /

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

Я реализовал пользовательские разрешения через UID, который предоставляется в JWT при успешной аутентификации. Сервер API проверяет разрешения, требуемые для запрошенной конечной точки, а затем проверяет, были ли UID в JWT назначены эти разрешения. Этот бит работает.

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

* * 1 022, например,
  • Авторизация клиента администратора для example.com/admin/v1/ API-вызовов
  • Запретить доступ любого другого клиента к API example.com/admin/v1/

Я искал возможности OAuth для достижения этой цели. После того, как RTFM прочитал следующее, я понял, что использовал неправильный инструмент для работы:

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

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

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

Я думал, что области могут использоваться для определения того, что приложение может делать с набором ресурсов, но области для этого не используются. Они используются для определения того, что приложение может делать от имени пользователя.

Таким образом, пользовательские разрешения определяют, что пользователь может делать с ресурсом. Области действия определяют, что приложение может делать от имени пользователя. Что можно использовать для определения того, к каким ресурсам приложение имеет доступ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...