wpf - 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 进行身份验证并确认用户在特定组中。
谢谢
解决方案
您可以按照此处的说明在您的令牌中包含 Groups 声明。您只需要修改应用程序清单中的“groupMembershipClaims”字段:
"groupMembershipClaims": "SecurityGroup"
令牌将包含使用所属组的 ID,如下所示:
{
"groups": ["{group id}"]
}
然后你就可以根据你代码中的group id做出逻辑判断了。
另一种方法是将 appRole 添加到您的 Azure AD 应用程序中并将用户和组分配给角色。
然后该组中的用户将拥有如下声明:
{
"roles": ["{the role you customized}"]
}
然后您可以根据用户的角色实现您的授权逻辑。
推荐阅读
- python - 为什么“while len(x)”给出正确答案而“while x”给出 Time Limit Exceeded?
- node.js - 在节点 js 中使用 Gstreamer?
- pthreads - musl中是否有任何功能,例如glibc中的“回溯”
- r - 在 R 中为 tbl_summary 创建一个函数
- java - JAVA-ANDROID STUDIO - 我应该使用什么参数来运行这个方法?
- flutter - 来自firebase firestore的颤振查询(where + order by)返回错误
- matlab - 我应该如何在 MATLAB 中将 syms 与求解命令一起使用?
- c# - 从本地驱动器上存储的 Outllok 邮件中读取
- android - 如何设置背景图像,适合 ios 初始屏幕版本的颤动屏幕?
- android - 圆角在材质按钮中不起作用