我在尝试通过Microsoft Graph beta端点(/beta/applications
)创建AAD应用时遇到了问题。
我正在使用具有应用程序权限Directory.ReadWrite.All
的AAD应用程序,并且已获得租户管理员的同意。
使用client_credentials
流程,我获得一个令牌,解码时显示它包含:
"roles": [
"Directory.ReadWrite.All",
"Directory.Read.All"
]
但是,当我POST
到/beta/applications
时,我得到以下回复:
{
'error': {
'code': 'Authorization_RequestDenied',
'innerError': {
'date': '2018-02-06T20:59:16',
'request-id': '02f77ca4-1634-426d-9235-cc0c109b0283'
},
'message': 'Insufficient privileges to complete the operation.'
}
}
有人可以帮我弄清楚发生了什么吗?
编辑:用于获取令牌的代码
tenant = 'michaelzlat.onmicrosoft.com'
url = f'login.microsoftonline.com/{tenant}/oauth2/v2.0/token'
data = {
'scope': 'graph.microsoft.com/.default',
'grant_type': 'client_credentials',
'client_id': client_id,
'client_secret': secret
}
r = requests.post(url, data=data)
答案 0 :(得分:2)
抱歉 - application creation上的文档不正确,需要修复。您需要使用Directory.AccessAsUser.All
委派权限。目前没有支持应用程序创建的应用程序权限(对于client_credentials流程)。如果您需要此支持,请在UserVoice上提交此功能的请求。
在仅限应用程序模式下创建应用程序的方案是什么?
根据对话编辑: 回复晚了非常抱歉。如果我理解正确,您将在ScriptLab租户中为每个片段创建一个多租户应用。这样,来自多个租户的用户可以尝试(并同意)发布的任何代码段。每个用户仍然需要同意允许代码段访问他们的数据 - 假设现在使用的片段只需要用户同意。因此,在ScriptLab租户中,您需要能够创建和管理许多应用程序的配置(代表不同的人 - 虽然不确定这里的authz)。
现在,您的ScriptLab应用可以使用 Directory.AccessAsUser.All 权限(并使用离线访问模式)创建和管理多个应用,由管理员授予并在其(或另一个ScriptLab租户)中运行用户的)上下文。有关Microsoft Graph可用权限的更多详细信息,请参阅https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference。这是Graph不支持应用管理的应用专用权限的解决方法(暂时)。另请注意,Microsoft Graph中的应用程序API仅在/ beta中可用,并且可能会发生变化,这可能会破坏您的应用程序。
另一种方法是使用Azure AD Graph。虽然没有记录,但Azure AD Graph支持名为 Application.ReadWrite.OwnedBy 的应用专用权限(管理此应用创建和拥有的应用)。您可以在Azure门户中看到该权限。如果您使用此权限配置应用程序(并授予它),那么您的应用程序将能够创建应用程序并对其进行配置。我们还没有把这个权限移植到Microsoft Graph。
希望这有帮助,