首页 > 解决方案 > PublicClientApplication - AcquireTokenInteractive - 组成员

问题描述

我正在编写一个 .Net Core 3.1 WPF 应用程序,它将针对 Azure Active Directory 进行身份验证。我已经在 Azure 中创建了应用注册,并且对 PublicClientApplication.AcquireTokenInteractive 的调用成功。

但是,现在,我想添加另一层安全性——只有特定组中的用户才能运行 WPF 应用程序。我已经尝试了多种方法:

选项 1:我尝试将此代码添加到对 AcquireTokenInteractive 的调用中。我认为这需要用户在我的组中,但它并没有强制调用失败。我找不到关于如何格式化声明字符串的文档 - 如果声明字符串的格式正确,这可能会起作用。

var result = await App.AcquireTokenInteractive(new List<string> { Scope })
                    .WithAccount(accounts.FirstOrDefault())
                    .WithClaims("<MY AD Group's Guid Id>")
                    .WithPrompt(Prompt.SelectAccount)
                    .ExecuteAsync()
                    .ConfigureAwait(false);

选项 2。我还研究了在成功调用 AcquireTokenInteractive 后尝试查询组成员身份,但我不确定执行此操作的最佳方法。

实现此目的的最佳方法是什么 - .Net Core 3.1 WPF 应用程序针对 Azure AD 进行身份验证并确认用户在特定组中。

谢谢

标签: wpfazureazure-active-directorymsal.net-core-3.1

解决方案


您可以按照此处的说明在您的令牌中包含 Groups 声明。您只需要修改应用程序清单中的“groupMembershipClaims”字段:

"groupMembershipClaims": "SecurityGroup"

令牌将包含使用所属组的 ID,如下所示:

{
  "groups": ["{group id}"]
}

然后你就可以根据你代码中的group id做出逻辑判断了。

另一种方法将 appRole 添加到您的 Azure AD 应用程序中并将用户和组分配给角色

然后该组中的用户将拥有如下声明:

{
  "roles": ["{the role you customized}"]
}

然后您可以根据用户的角色实现您的授权逻辑。


推荐阅读