将第三方身份提供商与 Azure AD 和 MSAL.js 结合使用

using third-party identity provider with Azure AD and MSAL.js

我已经使用 Angular 创建了一个单页应用程序并且 authentication/authorisation 由 Azure AD 管理。我已经使用 MSAL.js 启动隐式流程。

一切正常,但现在我的客户想要使用她自己的身份提供者 (IDP),以便用户可以通过单一入口点访问所有应用程序(包括我的应用程序)。这个IDP不是主流,是客户自建的;

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

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

然而,我很难弄清楚如何实现这一目标,以及是否可能?

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

建筑

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

先决条件UI站点

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

  • 客户端需要提供符合标准的身份提供者
  • 通常 IDP 需要通过 Open Id Connect 消息或 SAML2P 消息与您的授权服务器 (Azure AD) 通信

本土 IDP 可能不满足这些先决条件,在这种情况下,您需要向客户解释他们需要符合标准。

联盟的工作原理

  • 您的 UI 将重定向到您的 AS
  • 当给定触发器时,AS 将重定向到 IDP
  • 用户将在 IDP 中进行身份验证
  • IDP 将post一个令牌给你的 AS 来识别用户
  • AS 将向您的 UI
  • 发行另一个令牌

请注意,此处不涉及编码 - 供应商系统之间仅存在基于标准的集成。

客户会给你什么

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

  • IDP 的实体 ID
  • IDP 令牌的令牌签名 public 密钥,以便您的 AS 可以验证它们
  • A URL 重定向到

你会给客户什么

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

  • AS的实体id
  • 一个URL到post个代币到

触发从 AS 到 IDP 的重定向

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

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

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

Azure 广告规格

一旦您了解了高级过程,就会有一些技术性的东西来配置连接,您需要查阅供应商文档,例如 this Microsoft Azure B2B article

实践

如果您以前没有这样做过,那么您需要花一些时间来建立连接,然后记录该过程。

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