服务主体(Azure 应用程序多租户)是否可以使用 AZ CLI 授予管理员对租户中应用程序的同意?
Can a service principal (Azure Application multi-tenant) grant admin consent to application in tenant using AZ 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 Graph(委托和应用程序完全访问)
步骤
工作正常
# 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
使用全局管理员用户并执行脚本时,它工作正常。
问题
我们是否遗漏了允许此服务主体能够授予管理员许可的内容,还是只有 "user" 可以做的事情? (我在microsoft azure文档中没有找到任何回应)。
谢谢
我已与 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了解更多详情。
上下文
我们在 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 Graph(委托和应用程序完全访问)
步骤
工作正常
# 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
使用全局管理员用户并执行脚本时,它工作正常。
问题
我们是否遗漏了允许此服务主体能够授予管理员许可的内容,还是只有 "user" 可以做的事情? (我在microsoft azure文档中没有找到任何回应)。
谢谢
我已与 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了解更多详情。