c# - Azure Active Directory 获取用户组

标签 c# asp.net azure model-view-controller active-directory

我正在尝试(像许多其他人一样)为我的应用程序的用户获取组成员资格。 我不断遇到以下代码行的阻塞点:

IPagedCollection<IGroup> pagedCollection = await client.Groups.ExecuteAsync();

.. 抛出异常(“未授权”)。 虽然我明白错误的意思,但我不确定为什么会这样说。 我已授予我的应用程序 Graph API 下的每一项权限(39 个应用程序权限和 88 个委托(delegate)权限 - 目前我只是进行原型(prototype)设计)。

我还“管理员同意”,因为我已经完成了登录过程,并“接受”了它告诉我它将使用的很长的权限列表,然后继续带我回到我的应用程序,然后上面的代码行失败。

作为引用,我一直在关注 Azure 文档站点上的“TodoListWebApp”演示代码,虽然我可以使用 AD 身份验证成功登录到应用程序,但我对 HomeController Index 操作进行了修改以获取列表(作为测试)似乎是我的失败。

这是我到目前为止所使用的;

ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();
IPagedCollection<IGroup> pagedCollection = await client.Groups.ExecuteAsync();

do
{
    List<IGroup> directoryGroups = pagedCollection.CurrentPage.ToList();
    foreach (IGroup directoryGroup in directoryGroups)
    {
        roleList.Add((Group)directoryGroup);
    }
    pagedCollection = await pagedCollection.GetNextPageAsync();
}
while (pagedCollection != null);

我也尝试过遵循这个预先存在的问题; Get a list of groups that Azure AD user belongs to in claims

我已如上所述修改了应用程序 list ,并尝试使用 Jonas 发布的 GetGroupMembershipsByObjectId 方法。

这只会导致异常消息“发生一个或多个错误”。 所以我真的陷入了困境。

任何帮助都会很棒

编辑:

进行了一些编辑 - 我意识到发布的代码不准确,因为它引用的是角色而不是组,因此我进行了更新。

第二次编辑是我已经确定了这个助手的异常来源;

https://github.com/Azure-Samples/active-directory-dotnet-graphapi-web/blob/master/WebAppGraphAPI/Utils/AuthenticationHelper.cs

token 从未设置,因此会出现错误,但我在源代码中看不到要设置它的位置?如果有人能指出我那个方向。

最佳答案

根据您的描述,您正在 MVC 应用程序中使用 AD Graph。 AFAIK,您只需在 Azure 门户上注册您的 Web 应用程序/API 应用程序,然后设置 Windows Azure Active Directory API 所需的权限,然后选择委派权限访问签名的目录-in user登录并读取用户个人资料,如下所示:

enter image description here

此外,您可以按照有关 Calling the Azure AD Graph API in a web application 的 github 示例进行操作。 .

此外,您可以使用 jwt.io解码您的访问 token 并确保 scp 属性包含 Directory.AccessAsUser.AllUser.Read委派权限。

关于c# - Azure Active Directory 获取用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298301/

相关文章:

c# - 如何使用 C# 从字节数组为 WPF 媒体元素创建源?

c# - 使用 C# 和 WPF 更新 XML 文件

javascript - 循环打印函数

python-3.x - 如何将 DataFrame 作为 CSV 保存到特定的 Blob 存储容器 (Azure SDKv2)

java - 来自 GAE 的 azure-mysql 实例连接

c# - CIL 'fault' 子句与 C# 中的 'catch' 子句有何不同?

c# - byte[] 到文本文件的数据包转储/十六进制 View 格式

asp.net - 如何在单击按钮时更改包含的 CSS 文件?

javascript - 根据之前访问过的页面历史记录控制图像

具有 Service Fabric 的 Azure 应用程序网关