Использование токенов авторизации для предоставления доступа к указанному элементу c - PullRequest
0 голосов
/ 13 января 2020

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

Вместо того, чтобы придумывать нашу собственную спецификацию c для связи между этими двумя приложениями, мне было интересно, есть ли уже стандартный подход, доступный через что-то вроде OpenID Connect. OID C, кажется, обрабатывает большинство мрачных деталей, которые мы должны были бы рассмотреть в подобном случае, но один аспект, в котором он, кажется, не подходит, состоит в том, что его токены доступа кажутся универсальными, а не вызывая указанный c объект, к которому у пользователя есть доступ. В нем говорится «Вот пользователь, который может получить доступ к вашему приложению», но не «Вот пользователь, который может получить доступ к элементу 123».

Существует ли стандарт для использования токена доступа для предоставления доступа к указанному c пункт, желательно с использованием OAuth 2 и / или OpenID Connect? Правильно ли я считаю, что использование идентификатора элемента в качестве scope на маркере доступа было бы нецелесообразным использованием областей OAuth?

1 Ответ

0 голосов
/ 14 января 2020

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

  • Технология на основе OAuth 2.0 идентифицирует пользователя
  • Затем вы просматриваете детали пользователя на прикладной уровень для принудительной авторизации

Область действия OAuth 2.0 и c не могут обрабатывать такие вещи:

  • У вас нет доступа к учетной записи 123
  • У вас нет доступа к региону US

Поэтому я склонен искать их по идентификатору пользователя в токене после входа в систему. Это также значительно облегчает расширение, если, например, со временем элементы и права пользователя во внешнем приложении растут.

Более подробную информацию см. В моей статье Кэширование API-требований,

Также приведен пример кодированного алгоритма в Rest API, в результате чего объект утверждений может быть внедрен в logi c классы .

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

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

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