我有一个场景,我需要为我的API编写功能测试。 API使用Azure AD身份验证。系统中有多个角色,并且根据不同AD组的成员身份来确定用户的角色。 所以对于功能测试,我需要不同组的不同用户。
我创建了具有订阅中贡献者权限的服务主体,并将它们添加到组中,并按照Microsoft graph Application type API权限进行了授予。 -Application.Read.All -Directory.Read.All
现在,我使用这些API来完成我的用例。
1- https://login.microsoftonline.com/ {tenant-Id} / oauth2 / token
获取针对服务主体的访问令牌。
2- GET https://graph.microsoft.com/v1.0/me/memberOf
以获取用户组的列表。但是我得到了服务主体身份验证令牌的跟踪响应。
{
"error": {
"code": "Request_ResourceNotFound",
"message": "Resource 'xxxx471-bxxxa-45a2-b61b-18xxxxx42af88' does not exist or one of its queried reference-property objects are not present.",
"innerError": {
"request-id": "fxxxxc41-319e-xxxx-xxxx-360xxxx58077",
"date": "2020-04-13T11:41:01"
}
}
}
我也尝试过
3- https://graph.microsoft.com/v1.0/users/{princialId}/memberOf
并获得以下回复
"error": {
"code": "Request_ResourceNotFound",
"message": "Resource 'xxxxx-xxxx-xxxx-b61b-18421142af88' does not exist or one of its queried reference-property objects are not present.",
"innerError": {
"request-id": "fxxxxc41-319e-xxxx-xxxx-360xxxx58077",
"date": "2020-04-14T05:59:03"
}
}
}
我使用了在天蓝色广告中注册的应用的对象ID。当我使用以下命令使用Power Shell搜索服务主体时,发现与Object_Id不同于在Azure门户上的AD应用程序中编写的Object_Id
命令:get-AzureADServicePrincipal
使用此Object_Id,我可以使用Beta服务获取服务负责人的组。
https://graph.microsoft.com/beta/servicePrincipals/ {对象ID} / memberOf
任何人都可以解释为什么我无法使用v1.0服务获得服务主体组。 谢谢
答案 0 :(得分:0)
任何人都可以解释为什么我无法使用v1.0服务获得服务主体组。
由于v1.0
版本不支持此API GET /servicePrincipals/{id}/memberOf
,因此目前仅在Beta
版本中可用。
您可以检查此文档-List servicePrincipal memberOf
,用Version
选择1.0
,然后会显示如下提示消息。
我使用了在天蓝色广告中注册的应用的对象ID。当我使用以下命令使用Power Shell搜索服务主体时,发现与Object_Id不同于在Azure门户上的AD应用程序中编写的Object_Id
服务主体的Object Id
与应用程序注册的Enterprise applications
不同,从powershell那里获得的是正确的,此外,您也可以在from apiclient import errors
的门户中找到它。如下所示。
答案 1 :(得分:0)
我同意Beta服务不是V1.0的一部分,而是根据V1文档
https://graph.microsoft.com/v1.0/users/ {id | userPrincipalName} / memberOf
应该工作。
请访问 https://docs.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0&tabs=http