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

Azure active directory 通过图形创建AAD应用程序时权限不足,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,我试图通过Microsoft Graph beta端点(/beta/applications)创建AAD应用程序时遇到问题 我使用的AAD应用程序具有应用程序权限Directory.ReadWrite.All,并已获得租户管理员的同意 使用client\u credentialsflow,我获得了一个令牌,解码后显示它包含: "roles": [ "Directory.ReadWrite.All", "Directory.Read.All" ] 但是,当我将发布到/beta/a

我试图通过Microsoft Graph beta端点(
/beta/applications
)创建AAD应用程序时遇到问题

我使用的AAD应用程序具有应用程序权限
Directory.ReadWrite.All
,并已获得租户管理员的同意

使用
client\u credentials
flow,我获得了一个令牌,解码后显示它包含:

"roles": [
    "Directory.ReadWrite.All",
    "Directory.Read.All"
]
但是,当我将
发布到
/beta/applications
时,我得到以下响应:

{
“错误”:{
“代码”:“授权请求被拒绝”,
“内部错误”:{
“日期”:“2018-02-06T20:59:16”,
“请求id”:“02f77ca4-1634-426d-9235-cc0c109b0283”
},
“消息”:“权限不足,无法完成操作。”
}
}
有人能帮我弄清楚发生了什么事吗

编辑:用于获取令牌的代码

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)

抱歉-上的文档不正确,需要修复。您需要使用
目录.AccessAsUser.All
委托权限。当前没有支持应用程序创建的应用程序权限(对于客户端\u凭据流)。如果您需要此支持,请在上提交此功能的请求

在仅应用程序模式下创建应用程序的场景是什么

根据对话进行编辑: 很抱歉反应太晚。如果我理解正确,您将在ScriptLab租户中为每个代码段创建一个多租户应用程序。这样,来自多个租户的用户可以尝试(并同意)发布的任何片段。每个用户仍然需要同意才能允许代码段访问他们的数据——假设现在代码段使用的API只需要用户同意。因此,在ScriptLab租户中,您需要能够创建和管理许多应用程序的配置(代表不同的人-尽管这里不确定authz)

目前,您的ScriptLab应用程序可以使用Directory.AccessAsUser.All权限(并使用脱机访问模式)创建和管理多个应用程序,该权限由管理员授予,并在其(或另一个ScriptLab租户用户)上下文中运行。有关Microsoft Graph可用权限的详细信息,请参阅。这是一个解决方案,不支持应用程序管理的仅应用程序权限(目前)。另外请注意,Microsoft Graph中的应用程序API仅在/beta版中可用,可能会发生更改,这可能会破坏您的应用程序

另一种方法是使用Azure广告图。Azure AD Graph虽然没有文档记录,但只支持名为Application.ReadWrite.OwnedBy(管理此应用程序创建和拥有的应用程序)的应用程序权限。您可以在Azure门户中查看权限。如果您使用此权限配置应用程序(并授予此权限),则应用程序将能够创建应用程序并对其进行配置。我们只是没有时间将此权限移植到Microsoft Graph


希望这有帮助,

您能提供获取令牌所用的代码吗?另外,您的请求的主体是什么?在上面的问题中添加了代码。关于请求的主体(假设您是指/applications),我尝试了各种选项,但即使是最简单的{'displayName':someTestDisplayName}也失败了。还值得注意的是,我可以使用此令牌获取/应用程序。在中,我们希望能够获取图形访问令牌,以允许任何租户的用户针对存储在OneDrive through Graph上的文档运行自己的“代码片段”。由于
目录.AccessAsUser.All
权限需要管理员同意,因此我们采用的方法是在ScriptLab的租户上创建多租户AAD应用程序,以绑定到每个代码段。有没有其他方法可以做到这一点?