在对OpenID Connect进行了大量研究之后,我正在撰写这篇文章,包括阅读规范,而且我阅读的越多,提出的问题就越多。我希望有人能够帮助我并消除我的困惑。 OpenID Connect规范很好,但仅包含与我的用例不匹配的非常基本的示例。请让我尝试解释我的情况,然后提出我的问题:
我尝试将OIDC与 SharePoint Online 和两个应用程序结合使用。一个是应该与SharePoint交互的 webservice (后端),另一个是在以下浏览器的浏览器中运行的简单单页应用程序(前端)。允许他与Web服务进行交互的用户。我的IdentityProvider是 Active Directory 。 Web服务的任务是在SharePoint的用户上下文中执行一些操作,但是它还应该允许用户执行一组有限的操作,而这些操作只能允许SharePoint的管理员执行(例如,我想允许用户来创建一个SiteCollection而不是删除它)因此,我设法在SharePoint中注册了Web服务,以便它接收到特殊的access_token,从而授予它在SharePoint中的管理员访问权限。
到目前为止我的想法:
1)如果用户登录到SharePoint,他将从AD收到一个id_token和一个access_token。他可以使用id_token登录到SharePoint并直接与其交互。 (我已经开始工作了)
2)我还想在前端单页应用程序中对用户进行身份验证,因为某些用户可能无法对Web服务进行某些调用,并且我想在我的应用程序中将这些按钮隐藏起来。为此,我可以使用步骤1)中的id_token。
3)如果我的Web服务应该在用户的上下文中做某事,我可以将在步骤1)中为该给定用户创建的access_token传递给Web服务,然后将其转发到SharePoint。
4)如果我的Web服务应执行不允许用户自己执行的特权功能,则我想使用Web服务已经可以进行调用的特殊access_token。在这种情况下,我必须使用步骤1)中的id_token对我的Web服务上的用户进行身份验证,以确保我希望允许他的请求。
我的问题:
每个客户是否都必须请求自己的id / access_token? (这些不同的流程在OIDC和OAuth规范here和here中进行了描述),这仍将是单点登录吗?
还是可以仅在步骤1)中为用户生成一个id_token和access_token,然后将其传递给需要它们的所有客户端?
非常感谢您!!