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/