如何在 Azure Active Directory 中获取用户的“分配角色”?

2024-01-03

我将 Azure AD 与注册的应用程序一起使用,并使用 Microsoft Graph API 来查询 AD。

下面的代码告诉用户被分配到哪些组

var memberof = await graphClient.Users[xxx].MemberOf.Request().GetAsync();

我正在使用标准 AD 套餐,似乎组受到一定限制,我需要购买“高级 AD 套餐”才能充分使用它们。

所以我不想使用群组信息。我对我分配给我的用户的角色感兴趣,这些角色已放入我的应用程序清单中。

e.g

"appRoles": [
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Case Manager",
      "id": "{A_Guid}",
      "isEnabled": true,
      "description": "Case Manager's can create and assign Cases to other users",
      "value": "CaseManager"
    }, 

那么,如何使用 Graph Api 来告诉我用户是否具有特定角色?


1. 微软图形API

读取分配给用户的所有应用程序特定角色(即 AppRoleAssignments)的能力仅作为Microsoft Graph API beta 端点目前据我所知。 v1.0 中不提供此功能。您可以阅读有关版本的信息here https://developer.microsoft.com/en-us/graph/docs/concepts/versioning_and_support

从名称“beta”可以明显看出,它预计不会成为生产应用程序可以依赖的稳定版本。阅读更多具体要点Marc LaFleur 的这篇 SO 帖子 https://stackoverflow.com/questions/47161815/how-to-call-microsoft-graph-beta-api-from-c-sharp/47167606#47167606

确切的 API (微软文档参考 https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/approleassignment):

GET    https://graph.microsoft.com/beta/users/{id | userPrincipalName}/appRoleAssignments

我尝试使用 GraphServiceClient(.NET SDK for Microsoft Graph),但无法找到与 AppRoleAssignments 相关的任何内容。 (可能是因为 SDK 使用稳定 1.0 版本而不是 beta 版本的元数据)

无论如何,如果您仍然可以对此进行测试,请使用 Microsoft Graph Explorer 或直接从 C# 代码调用端点

string graphRequest = $"https://graph.microsoft.com/beta/users/{my user GUID}/appRoleAssignments";
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, graphRequest);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
HttpResponseMessage response = await client.SendAsync(request);

2.Windows Azure AD 图形 API

尽管建议尽可能使用 Microsoft Graph API,但在某些情况下 Microsoft Graph 还没有跟上,因此你被迫使用 Azure AD Graph API。应用程序管理相关的案例就是其中一些。

因此,您可以使用此 Azure AD Graph API。我很快就测试了这个Azure AD 图形资源管理器 https://graphexplorer.azurewebsites.net/#而且效果很好。

https://graph.windows.net/{yourtenantid}/users/{id}/appRoleAssignments?api-version=1.6

就像 Microsoft Graph Library for .NET 一样,您可以使用适用于 .NET 的 Azure AD 图形客户端库 https://www.nuget.org/packages/Microsoft.Azure.ActiveDirectory.GraphClient/你的代码看起来像这样..

aadgraphClient.Users["<user guid>"].AppRoleAssignments;

顺便说一句,由于您专门针对 Microsoft Graph API 提出了这个问题,所以我已经做出了相应的回答。

至少对于当前登录应用程序的用户来说,您始终可以找到应用程序角色 https://learn.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles分配给他们的角色主张 https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens#payload-claims作为 Azure Active Directory 访问令牌的一部分提供。

尽管这仅对当前用户的角色有帮助,但如果您尝试遍历应用程序的所有用户,则对管理场景没有帮助。以下示例读取角色声明并根据当前登录用户的应用程序角色进行授权。

使用 Azure AD 应用程序角色和角色声明在 Web 应用程序中进行授权 https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapp-roleclaims/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Azure Active Directory 中获取用户的“分配角色”? 的相关文章

随机推荐