确定登录到 Azure 的 Web 应用中的登录用户是否是 AD 组的成员

本文关键字:登录 是否是 用户 成员 AD Web Azure 应用 | 更新日期: 2023-09-27 18:35:21

我正在使用Windows Identity Framework在部署到Azure的Web应用程序中进行身份验证。 在本地运行应用时,可以使用 PrincipalContext 查看用户是否在组中:

        PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAIN");
        // find a user
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username);
        // find the group in question
        GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GROUP-NAME");
        if (user != null)
        {
            // check if user is member of that group
            return user.IsMemberOf(group);                
        }

这在本地有效,但在部署到 Azure 的应用中不起作用。 我现在不确定如何检查此信息。 我已经看到 Azure 不支持 LDAP 协议,所以这就是它不起作用的原因,但我不确定现在尝试完成此操作的正确方法。 我已经阅读了一些有关组声明、应用程序角色和 Azure 图形 API 的信息,但它们要么看起来矫枉过正,要么不是我应该采取的方向。 有什么帮助吗?

确定登录到 Azure 的 Web 应用中的登录用户是否是 AD 组的成员

正如你已经发现的那样,该方法在 Azure AD 中不起作用 - 你的应用未在 Intranet 中运行,因此无法进行这些调用。对此的标准解决方案是确保 Azure AD 在登录时发送的令牌中包含组,请参阅此示例。

您需要记住各种注意点 - 主要是使用 WIF 强制您依赖 WSFederation,这在组太多的情况下并不方便: Azure AD 通过期望你回调 Azure AD 图形 API 并在事后检索组来避免颁发大型令牌, 但该操作需要更现代的协议,如 OpenID Connect(如我链接到的示例所示)。

另一个挑战是,出于安全原因,令牌中的组由其 SID 而不是名称表示 - 因此需要知道要验证的 SIDS(或调用图形以检索其名称)。