【问题标题】:List privilegedRoles using Azure app/service principal使用 Azure 应用/服务主体列出 privilegedRoles
【发布时间】:2018-06-10 17:28:57
【问题描述】:

我正在尝试使用在 Azure 的 Active Directory 中创建的应用来请求 "List privilegedRoles" resource

我已在 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:
问题的完整再现 -

第 1 步:管理员同意

在以下位置打开浏览器: https://login.microsoftonline.com/MY-TENANT-ID/adminconsent?client_id=MY_APP_ID&state=12345&redirect_uri=http://localhost/myapp/permissions

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

看到成功重定向到:
http://localhost/myapp/permissions?admin_consent=True&tenant=MY_TENANT_ID&state=12345

第 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"
    }
  }
}

【问题讨论】:

  • 您能否提供一个您使用的代码示例以及您发送到 API 的不记名令牌?
  • @MarcLaFleur 它有点复杂,因为它分布在多个 java 类中。我正在使用相同的方法从图形 API 中成功获取用户和组,所以我认为问题不存在。正如我所提到的,令牌是通过服务主体/应用程序使用 (tenant id, app id, secret) 三元组创建的。
  • 没有看到一些代码或令牌,这只是一个猜谜游戏。由于令牌不能同时持有 应用程序和委托,因此了解您如何获得该令牌将解释很多。查看这篇文章以获得更深入的解释:massivescale.com/application-vs-delegated-scopes
  • @MarcLaFleur 查看我的样本复制更新。仅存在委托权限。
  • 看看我链接到的文章。您正在使用客户端凭据,这意味着您使用委托权限。我链接到的文章解释了这些作用域的工作原理。

标签: microsoft-graph-api


【解决方案1】:

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

  1. 创建本机 AAD 应用程序
  2. 授予它对 Azure AD 的读写特权访问权限,并确保管理员同意
  3. 调用 MSGraph PIM Api 使用此应用程序和委托令牌。

更多详情请见https://blogs.msdn.microsoft.com/anujchaudhary/2018/06/07/powershell-sample-for-privileged-identity-management-pim-for-azure-ad-roles/

【讨论】:

  • 看起来您没有使用委派权限。您可以尝试我提供的示例中提供的分步说明吗
  • 当我尝试使用 REST API 时,PowerShell 操作是不透明的 - 操作 $authContext.AcquireToken("https://graph.microsoft.com",$ClientID,$redirectUri,[Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always) 不会告诉我哪个 authn。用于获取代码和令牌的 API。你碰巧知道哪些?我相信此时我尝试了 v1 和 v2 auth 的所有组合。端点:/
  • PowerShell 只是被调用的应用程序(可以是 UX 等)。如果您查看代码,它会调用 REST API。 $authContext.AcquireToken 提示用户输入凭据以使用 ADAL for .Net 获取令牌。您可以在这里找到适用于不同平台的 ADAL docs.microsoft.com/en-us/azure/active-directory/develop/…
猜你喜欢
  • 2020-01-31
  • 2020-10-26
  • 2020-12-27
  • 1970-01-01
  • 2020-05-09
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多