我想将在我的应用程序注册中创建的Things.Reead.All角色分配给托管身份。 应用程序注册SP对象ID为8055e1eb-0000-0000-9b77-00000000000 角色定义如下:
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Allow the application to read all things as itself.",
"displayName": "Read all things",
"id": "86a914fa-a862-4962-9975-000000000000",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "Things.Read.All"
}
关于系统分配的受管身份的唯一已知信息是其对象ID,例如
aad300-0872-0000-811d-00000000000
,并且我希望允许它调用应用程序8055e1eb-0000-0000-9b77-00000000000,该应用程序希望看到访问令牌中的角色。 我知道我必须使用以下api来做到这一点。
https://graph.microsoft.com/v1.0/servicePrincipals/8055e1eb-0000-0000-9b77-00000000000/appRoleAssignedTo
{
"principalId": "aad300-0872-0000-811d-00000000000",
"resourceId": "8055e1eb-0000-0000-9b77-00000000000",
"appRoleId": "86a914fa-a862-4962-9975-000000000000"
}
我的租户访问范围广泛但受到控制。当我从
获取令牌时az account get-access-token --resource https://graph.microsoft.com
打电话给我,我得到
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
我需要弄清楚进行此调用所需的确切特权。
答案 0 :(得分:1)
因为您没有回答我的评论,所以我只能给您我自己的解决方案,该解决方案使用服务主体登录azure cli,它对我有用。
请按照以下步骤操作。
1。Create a new App Registration in azure ad,然后是get values for signing in和create a new application secret。
2。导航至应用程序的API permissions
,添加Directory.ReadWrite.All
的 Application权限(不是委托的权限)Microsoft Graph
,不要忘记最后点击Grant admin consent for xxx
按钮。
注意:从doc开始,AppRoleAssignment.ReadWrite.All
权限就足够了,但是根据我的测试,它将无法正常工作,不确定是否是bug,我有对该令牌进行解码,则该令牌具有AppRoleAssignment.ReadWrite.All
权限。
3。在azure cli中,运行以下命令以获取令牌。
az account clear
az login --service-principal --allow-no-subscriptions --username '<application-id>' --password '<application secret>' --tenant '<tenant-id>'
az account get-access-token --resource https://graph.microsoft.com
4。我测试了令牌以调用api-Grant an appRoleAssignment for a service principal
来为我的功能应用的系统分配的身份授予应用角色,效果很好。
在门户中检查它: