Oauth 2.0 通过Azure AD和MSAL.js使用第三方身份提供程序

Oauth 2.0 通过Azure AD和MSAL.js使用第三方身份提供程序,oauth-2.0,azure-active-directory,openid-connect,azure-ad-b2c,msal.js,Oauth 2.0,Azure Active Directory,Openid Connect,Azure Ad B2c,Msal.js,我用Angular创建了一个单页应用程序,身份验证/授权由Azure AD管理。我使用MSAL.js启动隐式流 一切正常,但现在我的客户希望使用自己的身份提供商(IDP),这样用户就可以对所有应用程序(包括我的应用程序)拥有一个单一的入口点。该IDP不是主流,它是由客户内部构建的 我想继续使用Azure AD管理授权(组、角色…)。我还希望我的应用程序及其专用后端API在Azure AD中注册,而不是在第三方IDP中注册。 Azure AD应继续负责向SPA提供访问令牌,以便调用API 不知何故

我用Angular创建了一个单页应用程序,身份验证/授权由Azure AD管理。我使用MSAL.js启动隐式流

一切正常,但现在我的客户希望使用自己的身份提供商(IDP),这样用户就可以对所有应用程序(包括我的应用程序)拥有一个单一的入口点。该IDP不是主流,它是由客户内部构建的

我想继续使用Azure AD管理授权(组、角色…)。我还希望我的应用程序及其专用后端API在Azure AD中注册,而不是在第三方IDP中注册。 Azure AD应继续负责向SPA提供访问令牌,以便调用API

不知何故,我应该将用户重定向到第三方IDP登录表单,成功登录后,它将重定向到我的SPA,然后SPA将令牌ID与AzureAD帐户关联并检索访问令牌(我想我必须在Azure AD中为第三方提供商中标识的用户创建一个帐户)

然而,我很难弄清楚如何做到这一点,如果有可能的话


对于这种情况,推荐的方法是什么?我还可以使用MSAL.js吗,还是必须依赖其他东西

架构

您的目标是完全正确的,您不需要更改一行代码来集成新的IDP,因此您可以继续使用MSAL.js

先决条件

为了将他们自己的IDP集成到您的系统中,您需要坚持某些先决条件:

  • 客户需要提供符合标准的身份提供者
  • 通常,IDP需要通过开放Id连接消息或SAML2P消息与授权服务器(Azure AD)通信
本土IDP可能不满足这些先决条件,在这种情况下,您需要向客户解释,他们需要符合标准

联盟如何运作

  • 您的UI将重定向到您的AS
  • 当触发时,AS将重定向到IDP
  • 用户将在IDP中进行身份验证
  • IDP将向您的AS发布令牌以识别用户
  • AS将向您的UI发出另一个令牌
请注意,这里没有涉及编码-供应商系统之间只有基于标准的集成

客户将给你什么

客户端详细信息通常通过向您提供其元数据文档来提供,然后这些详细信息在Azure AD中配置为信任条目:

  • IDP的实体id
  • IDP令牌的令牌签名公钥,以便AS可以验证它们
  • 要重定向到的URL
你将给客户什么

需要在客户端IDP中配置类似的信任条目,以便它信任请求并发出令牌-尽管此处通常不需要证书:

  • AS的实体id
  • 将令牌发布到的URL
触发从AS到IDP的重定向

一个选项是在Open id Connect重定向中将实体id转发到授权服务器。通常使用“idp”查询参数,如下所示:

客户端使用书签URL访问您的应用程序:

您向Open Id connect重定向添加了一个额外参数,以告诉它应该在何处进行身份验证:

AZURE广告详情

一旦您了解了高级流程,就需要一些技术人员来配置连接,您需要查阅供应商文档,例如

练习

如果您以前没有这样做过,那么您需要投入一些时间使连接正常工作,然后记录该过程


您可以使用Windows Server和ADFS模拟客户端连接,然后将其集成为SAML2P连接。不过,这是一个学习曲线,您需要ADFS证书等基础设施。

首先,非常感谢您提供了这一长而详细的答案。我必须处理所有这些信息,就像你说的,我必须通读文档。我只想澄清一件事。我对你的最后一段有点困惑,当你提到学习曲线——对基础设施和证书的需求时,这只是在我尝试使用ADF模拟客户端连接时,对吗?如果我将azure AD连接到我的客户端IDP,我不需要这些,对吗?