服务负责人(Azure应用程序多租户)可以使用AZ CLI向管理员授予租户中的应用程序同意吗?

时间:2019-10-29 12:25:30

标签: azure azure-active-directory azure-cli

上下文

我们在Azure上使用多个目录( TENANT_A TENANT_B )。目标是在 TENANT_A 中创建一个服务主体(应用程序) _SP_APP ,该服务主体被授予对 TENANT_B 的访问权限。我们希望在脚本中使用此服务主体来轻松管理两个目录。 脚本之一是在 TENANT_B 中进行新的应用程序注册,并为这些应用程序授予 ADMIN CONSENT

完成了什么

_SP_APP

  • 两个目录上的全局管理员
  • 授予对 TENANT_B 的访问权限(在企业应用程序中可见)
  • 已授予
  • Api权限管理员同意( TENANT_A TENANT_B ))
    • Microsoft Graph(委派和应用程序完全访问权限)
    • Azure Active Directory图形(委派和应用程序完全访问权限)

步骤

工作正常

# Login with service principal of multiple tenants application
az login --service-principal -u _SP_APP -p <PASSWORD> --tenant TENANT_B
# Creating application and fetching ID
_OBJECT_ID=`az ad app create ...` 

不起作用

# Granting Admin Consent
az ad app permission admin-consent --id $_OBJECT_ID
# ERROR
Bad Request({"ClassName":"Microsoft.Portal.Framework.Exceptions.ClientException","Message":"AADSTS50058: A silent sign-in request was sent but no user is signed in.\r\nTrace ID: 9c9bd004-a97a-4543-8ff0-e314de77a700\r\nCorrelation ID: 44c79409-2f3e-43de-a84b-1e5a42e382e7\r\nTimestamp: 2019-10-28 15:54:20Z" ...

奇怪的是,当我们az login与全局管理员用户一起执行脚本时,它运行良好。

问题

我们错过了让此服务主体能够授予管理员同意的东西吗?还是只有“用户”才能做到的事情? (我在Microsoft Azure文档中没有找到任何答复。)

谢谢

1 个答案:

答案 0 :(得分:1)

我已与Azure支持工程师确认。我们不能使用服务主体来授予管理员同意。

如果必须使用服务主体来执行此操作,则可以使用Microsoft Graph api。它将自动同意权限。

POST https://graph.microsoft.com/beta/xx.onmicrosoft.com/oauth2PermissionGrants

{
  "clientId": "clientId-value",
  "consentType": "consentType-value",
  "expiryTime": "2016-10-19T10:37:00Z",
  "id": "id-value",
  "principalId": "principalId-value",
  "resourceId": "resourceId-value"
}

要调用此api,您需要提供访问令牌,有关更多详细信息,请参考this document