Azure active directory 在访问令牌中包含来自外部数据库的角色

Azure active directory 在访问令牌中包含来自外部数据库的角色,azure-active-directory,Azure Active Directory,我正在从Azure AD登录。客户端使用MSAL。如果用户未通过身份验证,则会使用MSAL重定向到Microsoft登录屏幕。成功登录后,它将返回一个访问令牌。 我的角色将存储在数据库中。我需要在访问令牌中添加该用户的角色作为声明的一部分。我没有找到做这件事的方法。 我不想再从SPA调用API来获取DB角色。 请建议一些好的方法。 任何解释该方法的链接都将非常有用 我仍处于设计阶段,但无法找到最佳方法。 在微软的一个网站上,我发现我们可以从数据库中获取角色,但没有详细信息。 大多数情况下,我们需

我正在从Azure AD登录。客户端使用MSAL。如果用户未通过身份验证,则会使用MSAL重定向到Microsoft登录屏幕。成功登录后,它将返回一个访问令牌。 我的角色将存储在数据库中。我需要在访问令牌中添加该用户的角色作为声明的一部分。我没有找到做这件事的方法。 我不想再从SPA调用API来获取DB角色。 请建议一些好的方法。 任何解释该方法的链接都将非常有用

我仍处于设计阶段,但无法找到最佳方法。 在微软的一个网站上,我发现我们可以从数据库中获取角色,但没有详细信息。
大多数情况下,我们需要在Azure AD users menifest文件中提供角色。

在常规Azure AD中,角色声明仅来源于登录用户或用户所属组的应用程序角色分配,以及用户登录应用程序的应用程序角色

Azure AD中目前没有任何功能可以连接到任意数据库,以适当的形式进行数据库查询,并在生成的ID令牌中的角色声明中包含结果

我可以想出三个选项来实现您的场景:

登录后,调用API检索角色。虽然您提到这是不可取的,但它可能是最简单的方法,因此值得列出。用户向您的应用程序签名后,您的应用程序通常会获得API的访问令牌。如果您将API设置为直接访问,或者,您的SPA可以简单地获取必要的访问令牌作为登录的一部分,在这一点上,进行REST调用来检索用户的角色详细信息以及可能对呈现应用程序有用的其他信息是很简单的

将您的角色信息从数据库同步或复制到Azure AD。对于每个角色,请在Azure AD应用程序注册中创建一个应用程序角色。对于每个用户角色关联,创建应用程序角色分配以直接分配用户->应用程序角色,或者将组分配给应用程序角色并将用户添加到组用户->组->应用程序角色。保持同步可能不是一件小事,因此,如果您的场景允许将角色信息移动到Azure AD app角色分配,您可以完全忘记将Azure AD作为权威位置的数据库。当然,这可能不适用于您的具体情况

使用Azure AD B2C和自定义登录策略。您可以创建、设置到并配置策略以检索您的角色。在这种方法中,您仍然需要一个可以提供角色信息的REST API,因此,与其安装和迁移您的应用程序,不如简单地从列表中的SPA选项1调用API


非常感谢菲利普提供的信息。我们可以从Azure AD调用Rest API吗?正如您所说,Azure AD B2C可以调用Rest API。这在当前是不可能的,不。我们不能在AAD端进行任何更改,因此第二个选项我不能选择。第三个是不可能与AAD。若我使用第一种方法,那个么我需要从SPA调用另一个API来获取角色。现在在我的SPA端,我将有两个对象。一个是访问令牌,第二个是角色。但是其他API将具有基于角色的授权。[AuthorizeRole=Manager],并且它希望角色作为访问令牌中声明的一部分。我将如何使角色成为令牌中声明的一部分,并将其发送到API。可能是SPA的一些代码,我们可以这样做,尽管我没有尝试过,但只是想如果您需要访问令牌中的声明,那么您必须在Azure AD中表示应用程序角色分配。或者,您需要更新API以执行相同的查找/API请求来获取用户角色,通过Authorize属性来考虑这一点。谢谢Philippe。你的建议对我帮助很大。