我有一个C#Web应用程序,我们的业务用它来邀请访客用户访问我们的AAD并将用户分组。
我们使用这个C#Web应用程序而不是门户网站,因为它以更友好的方式向业务呈现数据,支持工作流程,可以对输入的数据进行一些审核,自定义邀请电子邮件消息等。
为了支持这个应用程序,我必须在我的应用程序本地配置中维护AAD组对象ID到AAD App对象ID的映射。实际上我的应用程序并没有真正使用任何AAD概念的应用程序。
有没有办法可以减轻我的配置,更有活力?我想放弃我的组列表,而是向AAD询问连接到我关心的每个应用程序的组。
我刚开始看
https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/approleassignment
但是我不太明白如何将不同的调用链接在一起以获取组oid的列表..
感谢任何建议/指导。
答案 0 :(得分:1)
你走在正确的轨道上。要查找分配给应用的用户,您需要获取应用程序服务主管的应用角色分配。
假设您知道您的服务主体的对象ID:
https://graph.microsoft.com/beta/servicePrincipals/eea0d6cd-20e2-aaaa-97ca-5b0cbffac985/appRoleAssignments
这在v1.0端点上不可用,只有MS Graph API的测试版。由于生产中不支持beta,因此您还可以在Azure AD Graph API中访问基本相同的URL(将API集成到MS Graph API中)。
以下是一个示例回复:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#appRoleAssignments",
"value": [
{
"id": "JYrDc-sj60S_Y0qph7LvGf1WEjyOr5NKvhK_v1NTME8",
"creationTimestamp": null,
"principalDisplayName": "Test User",
"principalId": "73c38a25-23eb-aaaa-bf63-4aa987b2ef19",
"principalType": "User",
"resourceDisplayName": "My App",
"resourceId": "eea0d6cd-20e2-aaaa-97ca-5b0cbffac985"
},
{
"id": "aLvuP_x1q0GACPZxznTP9w24cypievFBrGx-mNsCWGE",
"creationTimestamp": "2017-01-26T19:33:48.8356667Z",
"principalDisplayName": "Another User",
"principalId": "3feebb68-75fc-aaaa-8008-f671ce74cff7",
"principalType": "User",
"resourceDisplayName": "My App",
"resourceId": "eea0d6cd-20e2-aaaa-97ca-5b0cbffac985"
}
]
}
现在我的免费AAD不允许分组,所以这里只有用户分配。但唯一的区别是principalType
将是"Group"
,而principalId
将是组对象ID。
如果您不知道服务主体对象ID ,您可以使用此应用的客户端ID来获取它:
https://graph.microsoft.com/beta/servicePrincipals?$filter=appId eq '1c9fdc91-aaaa-aaaa-af8d-027507190f41'
这在v1.0端点中也不起作用。
Azure AD Graph API的URL将是:
https://graph.windows.net/tenant-id/servicePrincipals/eea0d6cd-20e2-aaaa-97ca-5b0cbffac985/appRoleAssignments?api-version=1.6
并通过客户端ID获取服务主体对象id:
https://graph.windows.net/tenant-id/servicePrincipalsByAppId/1c9fdc91-aaaa-aaaa-af8d-027507190f41/objectId?api-version=1.6
将 tenant-id 替换为您的Azure AD租户ID或经过验证的域,例如myorg.onmicrosoft.com。