Authorization_IdentityNotFound访问图API时出错

时间:2016-05-11 00:58:36

标签: azure office365 azure-active-directory microsoft-graph

我搜索了我发现的错误,没有找到任何匹配的问题。所以发帖问题。感谢是否有人提供了一些指示来继续。

我的目标是在桌面客户端中访问图形API。我已经开始使用fiddler进行实验。

  • 我已按照https://graph.microsoft.io/en-us/docs/authorization/app_only
  • 提供的说明操作
  • 使用我的Microsoft工作帐户使用应用程序注册门户注册Web APP。
  • 提供“在委派权限中读取所有用户的完整个人资料”
  • 请求令牌并使用Authorization标头中的令牌调用图API,获取以下错误。

    https://graph.microsoft.com/v1.0/users
    119
    {
      "error": {
        "code": "Authorization_IdentityNotFound",
        "message": "The identity of the calling application could not be established.",
        "innerError": {
          "request-id": "4c3a7bc6-e3d8-453c-adc9-5a12fec3b0ee",
          "date": "2016-05-11T00:46:23"
        }
      }
    }
    

4 个答案:

答案 0 :(得分:7)

此示例帮助我了解了仅限应用程序权限的流程。 https://blogs.msdn.microsoft.com/tsmatsuz/2016/10/07/application-permission-with-v2-endpoint-and-microsoft-graph/

对我来说是关键要点:

  • 确保您设置应用并指定所需的应用权限
  • 是否有管理员授予应用程序权限以对相关目录运行。
  • 获取相关令牌:

    请注意,以下请求中的范围为 https://graph.microsoft.com/.default

    <script>
    
    function printDiv(divName) {
    
     var printContents = document.getElementById(divName).innerHTML;
     w=window.open();
     w.document.write(printContents);
     w.print();
     w.close();
    }
    </script>
    
  • 使用令牌请求相关的图形资源,例如:

    POST https://login.microsoftonline.com/{tenantname}.onmicrosoft.com/oauth2/v2.0/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials&client_id=6abf3364-0a60-4603-8276-e9abb0d843d6&client_secret=JfgrNM9CcW...&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
    

答案 1 :(得分:4)

对我来说,我没有给予管理员同意。这是关键的一步。我的错误是认为通过授予应用程序权限,这是给予管理员同意,但它不是一回事。

从本网站的第3步开始:https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

我在填写租户和客户端ID之后将他们的电话粘贴到浏览器中,然后登录,一切正常。

GET https://login.microsoftonline.com/{tenant}/adminconsent
?client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

答案 2 :(得分:4)

在我的情况下,使用Quickstart(第1步),然后自动配置.net示例(第2步),然后下载代码示例(第3步),我遇到了相同的错误,如下图所示。

enter image description here

除步骤3之外,所有步骤均成功完成。Microsoft代码成功生成,生成了应用程序ID和项目中的应用程序机密,但租户在{{1}}中设置为common,如下图所示。

enter image description here

我认为这是有道理的,但是后来发现这是造成问题的原因。

解决方案: 我复制了目录(租户)ID,而不是用租户ID替换common,它起作用了。我不确定这是否是Azure快速入门代码生成中的错误。

enter image description here

答案 3 :(得分:0)

您会发现this document是针对应用专用应用的更好的说明。

您的描述中有两个问题突出。

  1. 您需要使用X509证书拨打仅限应用流量的电话。
  2. 您需要在应用上设置应用范围,而不是委托范围 - 委托范围适用于委托流而非仅限应用流。