【问题标题】:using third-party identity provider with Azure AD and MSAL.js通过 Azure AD 和 MSAL.js 使用第三方身份提供程序
【发布时间】:2020-05-25 13:26:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: oauth-2.0 azure-active-directory openid-connect azure-ad-b2c msal.js


    【解决方案1】:

    架构

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

    先决条件

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

    • 客户需要提供符合标准的身份提供者
    • 通常,IDP 需要通过 Open Id Connect 消息或 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 连接重定向添加一个额外的参数,告诉它应该在哪里进行身份验证:

    AZURE 广告说明

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

    实践

    如果您之前没有这样做过,那么您需要花费一些时间来让连接正常工作,然后记录该过程。

    您可以使用 Windows Server 和 ADFS 来模拟客户端连接,然后将其集成为 SAML2P 连接。但是有一个学习曲线,并且您需要 ADFS 证书等基础架构。

    【讨论】:

    • 首先,非常感谢您提供如此长而详细的回答。我必须处理所有这些信息,就像你说的,我必须通读文档。我只想澄清一件事。我对你的最后一段有点困惑,当你提到学习曲线需要基础设施和证书时,这只是我尝试使用 ADFS 模拟客户端连接,对吗?如果我将 azure AD 连接到我的客户端 IDP,我不需要这些,对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多