Я уже давно занимаюсь этим вопросом и пришел к выводу, что я полностью лаю не на том дереве.
Чтобы получить представление о том, что я пытаюсь сделать, я собрал 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 не определяет какие-либо конкретные значения для областей, так как
сильно зависит от внутренней архитектуры и потребностей сервиса.
Я думал, что области могут использоваться для определения того, что приложение может делать с набором ресурсов, но области для этого не используются. Они используются для определения того, что приложение может делать от имени пользователя.
Таким образом, пользовательские разрешения определяют, что пользователь может делать с ресурсом. Области действия определяют, что приложение может делать от имени пользователя. Что можно использовать для определения того, к каким ресурсам приложение имеет доступ?