【问题标题】:Can't deploy an app to Intune store via graph API - DeviceManagementApps.ReadWrite.All is an invalid scope?无法通过图形 API 将应用部署到 Intune 商店 - DeviceManagementApps.ReadWrite.All 是无效范围?
【发布时间】:2018-07-26 04:17:17
【问题描述】:

我们希望能够通过 API 将应用上传到 Intune 商店。 我看到了this example on GitHub,并想在 JS 中做类似的事情,所以我尝试使用相同的 REST 调用。 问题是,我似乎无法正确发出 https://graph.microsoft.com/beta/deviceAppManagement/mobileApps 请求 - 我总是得到 401。通过 Graph API Explorer 发出相同的请求时,它工作正常。

我尝试修复我的权限,但我在获取正确的令牌时有点卡住了。 我在“公共”和我们自己的租户上使用管理员帐户执行了以下步骤:

  1. 已征得管理员同意 - https://login.microsoftonline.com/nativeflow.onmicrosoft.com/adminconsent?client_id=<ID>&redirect_uri=<URI>

  2. 获得用户授权 - https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=<ID>&response_type=code&redirect_uri=<URI>&response_mode=query&scope=DeviceManagementApps.ReadWrite.All

  3. 获取实际令牌的 POST 请求 - https://login.microsoftonline.com/nativeflow.onmicrosoft.com/oauth2/v2.0/token

    具有以下主体:

    client_id: <ID>
    scope: https://graph.microsoft.com/.default
    client_secret: <secret>
    grant_type: client_credentials
    requested_token_use: on_behalf_of
    code: <The code I got in step 2>
    

我尝试将第 3 步中的范围更改为 https://graph.microsoft.com/DeviceManagementApps.ReadWrite.All 或简单地更改为 DeviceManagementApps.ReadWrite.All,但它说它不是有效范围。

我在第 3 步中获得了一个令牌,但是当我尝试调用实际 API 时收到此错误:

{
  ErrorCode:"Forbidden",
  Message:{
    _version: 3,
    Message: "An error has occurred - Operation ID (for customer support): 00000000-0000-0000-0000-000000000000 - Activity ID: 7b5c3841-976d-4509-b946-f7fdabd047d7 - Url: https://fef.msub02.manage.microsoft.com/StatelessAppMetadataFEService/deviceAppManagement/mobileApps?api-version=5018-05-02",
    CustomApiErrorPhrase: "", 
    RetryAfter: null, 
    ErrorSourceService: "", 
    HttpHeaders: {"WWW-Authenticate":"Bearer realm=urn:intune:service,f0f3c450-59bf-4f0d-b1b2-0ef84ddfe3c7"}
  },
  Target:null,
  Details:null,
  InnerError:null,
  InstanceAnnotations:[]
}

所以是的,我几乎被困住了。有没有人有这方面的经验?我试过用 Postman、curl 和 via code 进行调用,但没有任何效果。

干杯:)

【问题讨论】:

    标签: microsoft-graph-api


    【解决方案1】:

    您遇到了几个问题:

    1. 您正在使用Authorization Code 授予工作流,但请求Client Credentials

    2. 范围Device.ReadWrite.All 是一个应用范围,它只适用于客户端凭据。它不是有效的委托范围,因此当您尝试使用 Device.ReadWrite.All 对用户(也称为委托)进行身份验证时,它将返回错误。

    3. 您的正文使用的是key:value,但它应该使用标准格式编码 (key=value)。

    要使其正常工作,您需要申请token without a user。这是通过跳过您的第二步并直接转移到检索令牌来完成的(正文换行符只是为了便于阅读):

    POST https://login.microsoftonline.com/nativeflow.onmicrosoft.com/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    client_id={id}
    &client_secret={secret}
    &scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
    &grant_type=client_credentials
    

    【讨论】:

    • 感谢您的评论。我已经尝试了你的建议,但我仍然得到同样的错误。 Device.ReadWrite.Al 是我需要的权限吗?我不需要DeviceManagementApps.ReadWrite.All 吗?我的应用程序中的权限是:Delegated - User.ReadDeviceManagementApps.ReadWrite.All Application - Application.ReadWrite.AllDevice.ReadWrite.All
    • 对于委派访问,您可以使用DeviceManagementApps.ReadWrite.AllDeviceManagementApps.Read.All。这要求您使用 authorization_code 而不是 client_credentials(令牌不能同时具有 App 和 Delegate 范围)。您可以在 massivescale.com/microsoft-v2-endpoint-primer 找到有关如何检索令牌的文章。
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 2019-01-06
    • 2018-02-14
    • 2017-08-04
    • 2017-02-23
    • 2019-05-09
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多