Microsoft graph api 使用Azure应用程序/服务主体列出privilegedRoles

Microsoft graph api 使用Azure应用程序/服务主体列出privilegedRoles,microsoft-graph-api,Microsoft Graph Api,我正在尝试使用Azure的Active Directory中创建的应用程序请求 我在Graph API应用程序中为它提供了所有应用程序权限和委托权限,但没有任何效果 答案总是: "error": { "code": "UnknownError", "message": "{\"message\":\"An error has occurred.\"}", "innerError": { "request-id": "3e1bb5cf-2d2e-402f-8648-27193b

我正在尝试使用Azure的Active Directory中创建的应用程序请求

我在Graph API应用程序中为它提供了所有应用程序权限和委托权限,但没有任何效果

答案总是:

"error": {
  "code": "UnknownError",
  "message": "{\"message\":\"An error has occurred.\"}",
  "innerError": {
    "request-id": "3e1bb5cf-2d2e-402f-8648-27193b28510a",
    "date": "2018-06-06T14:26:02"
  }
}
任何帮助都将不胜感激

更新1:
该期刊物的完整复制本—

  • 具有委托权限“Directory.AccessAsUser.All”(且无应用程序权限)的V2应用程序,重定向的url
步骤1:管理员同意

在以下位置打开浏览器:

并授予管理员对请求权限的同意

请参阅成功重定向到:

步骤2:获取令牌

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'client_id=MY_APP_ID&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=MY-APP-SECRET&grant_type=client_credentials' 'https://login.microsoftonline.com/MY_TENANT_ID/oauth2/v2.0/token'
得到如下回复:

{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 0,
    "access_token": "SOME-VERY-LONG-TOKEN"
}
步骤3:尝试获取资源

curl -X GET -H "Authorization: Bearer SOME-VERY-LONG-TOKEN" 'https://graph.microsoft.com/beta/privilegedRoles'
错误:

{
  "error": {
    "code": "UnknownError",
    "message": "{\"message\":\"An error has occurred.\"}",
    "innerError": {
      "request-id": "cc9c950c-369c-4fb5-8ec4-eb4048e32a5d",
      "date": "2018-06-10T09:09:57"
    }
  }
}

您只能使用委派权限调用MSGraph PIM Api。 基本上,您需要执行以下设置:

  • 创建本机AAD应用程序
  • 授予它对Azure AD的读写权限,并确保管理员同意
  • 使用此应用程序和委派令牌调用MSGraph PIM Api
    有关更多详细信息,请参见

    能否提供一个示例,说明您使用的代码以及发送到API的承载令牌?@marclafler这有点复杂,因为它分布在多个java类中。不过,我使用相同的方法成功地从graph API获取用户和组,因此我认为问题并不存在。正如我提到的,令牌是通过服务主体/应用程序使用三元组(租户id、应用程序id、机密)创建的。没有看到一些代码或令牌,这只是一个猜测游戏。由于令牌不能同时持有应用程序和委托,了解您如何获得该令牌将解释很多。查看这篇文章以获得更深入的解释:@MarcLaFleur查看我的样本复制更新。只存在委派权限。请看我链接到的文章。您正在使用客户端凭据,这意味着您没有使用委派的权限。我链接到的文章解释了这些作用域是如何工作的。看起来您没有使用委派的权限。您可以尝试我提供的示例中提供的分步说明吗?因为我正在尝试使用REST API,PowerShell操作是不透明的-操作
    $authContext.AcquireToken('https://graph.microsoft.com“,$ClientID,$redirectUri,[Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::始终)
    不会告诉我是哪个作者。用于获取代码和令牌的API。你知道是哪一个吗?我相信在这一点上,我尝试了v1和v2 auth的所有组合。端点:/PowerShell只是被调用的应用程序(可以是UX等)。如果您查看代码,它将调用RESTAPI$authContext.AcquireToken提示用户提供凭据,以便使用ADAL for.Net获取令牌。您可以在这里找到不同平台的ADAL。