Azure Active Directory获取用户组

时间:2018-01-17 10:01:46

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

我正在尝试(像许多其他人一样)获取我的应用用户的群组成员资格。 我一直在阻塞点,其中包含以下代码行:

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

..抛出(&#34; Not Authorized&#34;)的例外。 虽然我得到了错误所说的内容,但我不确定为什么会这样说。 我已经在Graph API下授予了我的应用程序的每个权限(39个应用程序权限和88个委派权限 - 此时我只是原型设计)。

我也有&#34;管理员同意&#34;因为我已经完成了登录过程并且接受了#34;接受&#34;它告诉我它将要使用的很长的权限列表,然后继续将我带回我的应用程序,然后在上面的代码行上失败。

作为参考,我一直在关注&#34; TodoListWebApp&#34; Azure文档站点上的演示代码,虽然我可以使用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

我已经修改了提到的应用程序清单,并尝试使用Jonas发布的GetGroupMembershipsByObjectId方法。

这只会导致异常消息&#34;发生了一个或多个错误&#34;。 所以我很好,真的卡住了。

任何帮助都很棒

编辑:

一些编辑 - 我发现发布的代码并不准确,因为它引用的是角色而不是群组,所以我已经更新了。

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

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

令牌从未设置因此错误,但我无法在源中看到它的意图设置?如果有人能指出我的方向。

1 个答案:

答案 0 :(得分:2)

根据您的描述,您在MVC应用程序中使用AD Graph。 AFAIK,您只需在Azure门户上注册Web应用程序/ API应用程序,然后为 Windows Azure Active Directory API设置所需权限,然后选择委派权限Access the directory as the signed-in user和{{1如下:

enter image description here

此外,您可以关注Calling the Azure AD Graph API in a web application的github示例。

此外,您可以使用jwt.io解码访问令牌,并确保Sign in and read user profile属性包含 Directory.AccessAsUser.All  和 User.Read 委派权限。