OpenID Connect с несколькими клиентами и SSO - PullRequest
0 голосов
/ 25 июня 2018

Я создаю этот пост после того, как сам довольно много исследовал OpenID Connect, включая чтение спецификаций, и чем больше я читаю, тем больше вопросов возникает. Я надеюсь, что кто-то сможет мне помочь и очистить мое замешательство. Спецификации OpenID Connect хороши, но содержат только самые простые примеры, которые не соответствуют моему сценарию использования. Пожалуйста, позвольте мне попытаться объяснить мою ситуацию, а затем задать мой вопрос:

Я пытаюсь использовать OIDC в ​​сочетании с SharePoint Online и двумя приложениями. Одним из них является веб-сервис (серверная часть), который должен взаимодействовать с SharePoint, а другим - простое одностраничное приложение (интерфейсная программа), работающее в браузере пользователя. это позволяет ему взаимодействовать с веб-сервисом. Мой IdentityProvider - Active Directory . Задача веб-службы состоит в том, чтобы выполнять некоторые действия в контексте пользователя в SharePoint, но также предполагается, что он позволяет пользователю выполнять ограниченный набор действий, которые может выполнять только администратор SharePoint (например, я хочу разрешить пользователю создать SiteCollection, но не удалять его. По этой причине мне удалось зарегистрировать веб-сервис в SharePoint, чтобы он получил специальный access_token, который предоставляет ему доступ администратора в SharePoint.

Пока мои мысли:
1) Если пользователь входит в SharePoint, он получает id_token и access_token из AD. Он может использовать id_token для входа в SharePoint и непосредственного взаимодействия с ним. (У меня это работает)
2) Я также хочу аутентифицировать пользователя в одностраничном приложении внешнего интерфейса, поскольку некоторые пользователи не могут выполнять определенные вызовы веб-службы, и я хочу скрыть эти кнопки от них в моем приложении. Для этого я мог бы использовать id_token из шага 1). 3) Если мой веб-сервис должен что-то делать в контексте пользователя, я могу просто передать access_token, который был создан для данного пользователя на шаге 1), в веб-сервис, а затем переслать его в SharePoint.
4) Если мой веб-сервис должен выполнять привилегированную функцию, которую пользователь не может выполнять самостоятельно, я хочу использовать специальный access_token, который веб-сервис уже использует для выполнения вызова. В этом случае я должен аутентифицировать пользователя в моем веб-сервисе с его id_token из шага 1), чтобы убедиться, что я хочу разрешить этот запрос его.

Мой вопрос:
Каждый клиент должен сделать запрос на свой собственный идентификатор / access_token? (Эти различные потоки описаны в спецификациях OIDC и OAuth здесь и здесь ), и все равно будет ли это Single-Sign-On?
Или я могу просто сгенерировать один id_token и access_token для пользователя на шаге 1), а затем передать их всем клиентам, которые в них нуждаются?

Большое спасибо заранее !!

...