从Azure AD中为RBAC检索用户组成员身份

时间:2015-01-09 09:49:49

标签: c# azure asp.net-web-api rbac adal

我在WPF(Native Client)中创建了一个测试应用程序。此客户端通过ADAL库通过Azure进行身份验证,并且我在登录后成功获取了令牌。我想要做的是获取用户所属组的列表,以便我可以将此组用作访问数据的访问控制。

到目前为止:

  • 使用Azure成功设置我的本机客户端,并使用其Windows" Windows Azure Active Directory"委派权限"读取目录数据"和"启用登录和阅读用户'简档&#34 ;. permission to other application screenshot

  • 登录后获取令牌

  • 阅读用户'个人资料信息
  • 创建了一个用户和组列表,并将它们添加到Azure AD中的各自组中。

当我尝试使用以下设置查询Azure GRAPH时

private async void ReadUserRoles(object sender, RoutedEventArgs e)
        {
            var result = authContext.AcquireToken(resource, clientID, redirectUri);
            var httpClient = new HttpClient();
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            var userID = result.UserInfo.UniqueId;
            var url = string.Format("{0}{1}/users/{2}/memberOf?api-version=2013-04-05", "https://graph.windows.net/", tenantID, userID);
            var msg = await httpClient.GetAsync(url);

            var userRoles = await msg.Content.ReadAsStringAsync();
            MessageBox.Show(userRoles);
        }

GRAPH查询来自:http://msdn.microsoft.com/en-us/library/azure/jj126255.aspx 但后来我收到了未经授权的错误。我登录的用户是"全局管理员"在Azure中。完整的错误消息是:

{"odata.error":{"code":"Authentication_MissingOrMalformed",
"message":{"lang":"en","value":"Access Token missing or malformed."},"values":null}}

我的主要目标是设置一个基于用户访问数据的应用程序。使用WPF客户端在AD中成为会员。

1 个答案:

答案 0 :(得分:2)

您不再需要查询图表以获取组信息,我们有一项新功能可以在令牌中提供这些功能。见http://www.dushyantgill.com/blog/2014/12/10/authorization-cloud-applications-using-ad-groups/

链接不长,但this link可能有帮助