通过图形创建AAD应用程序时权限不足

时间:2018-02-09 21:34:59

标签: azure-active-directory microsoft-graph

我在尝试通过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)

1 个答案:

答案 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。

希望这有帮助,