azure 访问图表API时出现Authorization_IdentityNotFound错误

weylhg0b  于 2023-03-09  发布在  其他
关注(0)|答案(5)|浏览(144)

我已经搜索了错误,我发现,没有找到任何匹配的问题。所以张贴一个问题。感谢它,如果有人提供一些指针继续进行。
我的目标是在我的桌面客户端访问图形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"
     }
   }
 }
798qvoo8

798qvoo81#

在我的例子中,我得到了同样的错误后,我使用快速启动(步骤1),然后自动配置.net样本(步骤2),然后下载代码样本(步骤3),如下图所示。

除步骤3外,所有步骤均已成功完成。Microsoft代码成功生成了项目中的应用ID和应用机密,但appsetting.json中的租户设置为common,如下图所示。

我认为这是一件有效的事情,但后来发现这导致了这个问题。
解决方案:我复制了目录(租户)ID,然后用租户ID替换common,它工作了。我不确定这是否是Azure快速入门代码生成中的bug。

更新正如我最近阅读的,常见的原因。

  • 对于多租户应用程序,可以使用“common”。
  • 对于单租户应用程序,必须使用Azure门户中的租户ID

nfg76nw0

nfg76nw02#

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

  • 确保您设置了应用程序并指定了所需的应用程序权限
  • 一定要让管理员授予应用程序在相关目录下运行的权限。
  • 获取相关令牌:

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

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
  • 使用令牌请求相关的图形资源,例如:
GET https://graph.microsoft.com/v1.0/users/demouser01@[tenant-name].onmicrosoft.com/drive/root/children

Accept: application/json
Authorization: Bearer eyJ0eXAiOi
emeijp43

emeijp433#

对我来说,我没有给予管理员同意。这是关键的一步。我的错误是认为通过授予应用程序权限,这就是给予管理员同意,但这不是一回事。
从本网站的步骤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
xa9qqrwz

xa9qqrwz4#

在生成新的访问令牌时,确保用实际承租人id https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token替换tenant_id

olmpazwi

olmpazwi5#

你会发现this document是一个更好的纯应用程序指令集。
从你的描述中有两个问题很突出。
1.您需要使用X509证书来调用仅限应用程序的流。
1.你需要在应用上设置应用作用域,而不是委托作用域-委托作用域用于委托流,而不是仅应用流。

相关问题