ASP Core Azure Active Directory 登录使用角色

phi*_*con 4 asp.net azure azure-active-directory asp.net-core

我创建了一个 Azure Active Directory 应用程序,我想使用基于角色的安全性。我跟着教程:https : //azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/

登录有效,我将角色添加到应用程序清单并将角色分配Approver给我自己的帐户。现在我想使用这些角色。

登录后,控制器中的以下工作:

[Authorize]
Run Code Online (Sandbox Code Playgroud)

但是在添加角色时,用户没有被授权:

[Authorize(Roles="Approver")]
Run Code Online (Sandbox Code Playgroud)

以下也返回false:

User.IsInRole("Approver");
Run Code Online (Sandbox Code Playgroud)

似乎角色没有被检索,关于如何将角色功能添加到这个演示项目的任何建议?

Jac*_*der 6

在使用 Azure AD For Groups 时,组成员身份信息不会神奇地出现在应用程序中,您需要使用Graph API在身份验证后为用户获取组,或者配置 Azure AD 以发回代表用户组成员身份的声明。

配置 Azure AD 以发送组声明:

通过在 Azure 门户下 => Azure Active Directory => 应用程序注册 => 所有应用程序 => 选择你的应用程序 => 单击顶部操作栏中的清单来更改应用程序清单

groupMembershipClaims更改为 SecurityGroup,

在此处输入图片说明

完成后,您应该会收到来自 Azure AD 的组声明,我们可以通过迭代 User 的 Claims 属性快速看到这一点。

claim 的值将是对象 ID,您需要知道一个或多个组的对象 ID。

在此处输入图片说明

在此处输入图片说明

有了 ID,您现在可以定义 ASP.NET Core 授权策略,如下所示,

        services.AddAuthorization(options => {
            options.AddPolicy("Approver",
                    policyBuilder => policyBuilder.RequireClaim("groups",
                    "c63b2f53-eff9-4d68-8b47-07f151270c74"));
        });
Run Code Online (Sandbox Code Playgroud)

您已准备好检查此政策,如下所示:

   [Authorize("Approver")] OR
   [Authorize(Policy = "Approver")]
Run Code Online (Sandbox Code Playgroud)