Azure AD B2C 单页应用角色



我们正在尝试将Azure AD B2C集成到SPA中。 我们希望在票证中包含角色,以便我们可以在 API 中使用 AuthorizeRoles 和 IsInRole。 我们已经看了几个例子。

例 1

例 2

第一个示例不是 SPA,并且不包括角色。 根据以下链接,不支持使用 Azure AD B2C 在票证中包含成员资格和组。

Azure AD B2C 组成员身份功能反馈

上面建议的解决方法似乎是使用"OnAuthorizationCodeReceived"事件,如下所示将您自己的角色声明注入/添加到票证中。

解决方法

我们遇到的问题是我们正在使用 SPA,因此我们需要遵循示例 2,我们还需要能够将我们自己的托管角色添加到票证中,这不是受支持的功能,但Microsoft说有一个解决方法如图所示。 但是,该解决方法不适用于 MSAL.js如示例 2 所示。

如何使用 MSAL.js 库将我们自己的托管角色包含在票证中,以便我们可以将 Azure AD B2C 集成到我们的 SPA 中,使我们能够在 API 中使用 AuthorizeRoles 和 IsInRole?

首先,你提到你正在使用 MSAL.js 库,这意味着 v2 终结点。 目前(截至 2018 年 5 月 16 日),v2 终结点对角色和组有限制,请参阅 v2 限制,其中指出:

v2.0 终结点不支持在 ID 令牌中颁发角色或组声明。

ID 令牌在隐式流中与 v2 终结点一起使用,请参阅此处的 Azure AD v2 Spa 引导式设置,并在"详细信息">下阅读大约一半

最重要的是绝对确保 v2 终结点(和 MSAL 库)可以支持你的要求。

就我自己而言,我们最终选择了 v1 终结点和 ADAL 库,部分原因是由于这样的限制。 但下面是在代码中使用角色的一些示例。 请注意,这些存储库是相当新的,我仍在构建文档。 有两个存储库,一个是独立的angularjs upi项目,另一个是一组API(它们是我在codecamp演示中使用的演示)。 请继续阅读下文,了解 AAD 中的角色。 只有 UI 示例使用 ADAL 库(注意:ADAL 和 MSAL 库用于管理客户端中的令牌,而不是用于锁定后端的库)。

原料药:https://github.com/BgRva/aad_adal_api_dn_std/tree/Step_C

用户界面:https://github.com/BgRva/aad_adal_ui_ng_js/tree/Step_C

有关 AAD 中的角色的一些说明:

  • 角色是特定于应用程序的,因此在上面的示例中,相同的 必须为所有将使用的应用程序注册角色 它们(这也包括角色 ID)
  • 可以在 AAD 中向用户授予多个角色,只需在选择其他角色的情况下将它们多次添加到该应用程序。
    • 手动将用户添加到角色不会缩放,需要在门户中进行大量单击。 使用组可以更轻松地管理它,但只有在 AAD 高级级别 2 才能获得此权益
    • 据说有一种方法可以以编程方式添加角色,但我还没有找到任何关于它的信息

干杯