1。微软图形 API
读取分配给用户的所有应用程序特定角色(即 AppRoleAssignments)的功能仅作为当前 AFAIK 的 Microsoft Graph API beta 端点 的一部分提供。这在 v1.0 中不可用。你可以阅读版本here
从名称“beta”可以看出,它预计不会是生产应用程序可以依赖的稳定版本。阅读this SO Post by Marc LaFleur中的更多具体点
确切的 API (Microsoft Docs Reference):
GET https://graph.microsoft.com/beta/users/{id | userPrincipalName}/appRoleAssignments
我尝试使用 GraphServiceClient(用于 Microsoft Graph 的 .NET SDK),但找不到与 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 Graph Explorer 快速测试了它,它工作正常。
https://graph.windows.net/{yourtenantid}/users/{id}/appRoleAssignments?api-version=1.6
就像 Microsoft Graph Library for .NET 一样,您可以使用 Azure AD Graph Client Library for .NET,您的代码将如下所示..
aadgraphClient.Users["<user guid>"].AppRoleAssignments;
附带说明,由于您专门针对 Microsoft Graph API 提出了该问题,因此我已相应地回答了该问题。
至少对于应用程序的当前登录用户,您始终可以从作为 Azure Active Directory 访问令牌的一部分的 Role claims 中找到分配给他们的 Application Roles。
虽然这仅对当前用户的角色有帮助,但如果您尝试跨应用程序的所有用户进行管理,则对管理类型的场景没有帮助。这是一个读取角色声明并根据当前登录用户的应用角色进行授权的示例。
Authorization in a web app using Azure AD application roles & role claims