无法访问Microsoft图形列表消息API

时间:2020-04-11 19:25:44

标签: azure azure-active-directory microsoft-graph-api multi-tenant microsoft-graph-mail

我尝试使用列表消息API(https://docs.microsoft.com/en-us/graph/api/user-list-messages?view=graph-rest-1.0&tabs=http)获取用户的邮件信息。

我正在按照https://docs.microsoft.com/en-us/graph/auth-v2-service中所述的说明进行操作。

我注册了我的应用程序,配置了“应用程序权限”以能够使用列表消息,并获得了管理员的同意

 // Line breaks are for legibility only.
 GET https://login.microsoftonline.com/{MY_TENANT_NAME}/adminconsent
 ?client_id=MY_APP_CLIENT_ID
 &state=12345
 &redirect_uri=https://localhost/myapp/permissions

并提供我的凭据,我可以获取 admin_consent = True 网址。然后我可以使用

获取访问令牌
// Line breaks are for legibility only.

POST https://login.microsoftonline.com/{MY_TENANT_NAME}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=MY_APP_CLIENT_ID
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=MY_APP_SECRET_KEY
&grant_type=client_credentials

我有一个有效的访问令牌。我可以看到我的用户正在呼叫https://graph.microsoft.com/v1.0/users

但是,当我致电https://graph.microsoft.com/v1.0/users/ {MY_USER_ID} /消息时,我收到一条错误消息。

{
  "error": {
    "code": "OrganizationFromTenantGuidNotFound",
    "message": "The tenant for tenant guid '2a862810-93dc-4096-a6b0-dda413670497' does not exist.",
    "innerError": {
      "request-id": "ba60c495-742b-4655-be74-fe8802427756",
      "date": "2020-04-11T19:20:32"
    }
  }
}

有趣的是,当我使用https://developer.microsoft.com/en-us/graph/graph-explorer时,我可以收到用户的电子邮件。我已经检查了查询,但似乎没有任何区别。我在调查时看到的唯一区别 AAD->企业应用程序->权限, 我可以在Graph Explorer应用程序中看到用户同意权限,但在我的应用程序中看不到。

3 个答案:

答案 0 :(得分:0)

奇怪的是它抱怨您的tenantID。但是,在AAD注册的应用程序下,

https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps

检查是否设置了Mail.Read *权限。

答案 1 :(得分:0)

您是否在使用正确的应用ID,就像在广告应用中一样,存在三种ID:应用ID,对象ID和目录ID。在这里,您必须使用应用程序ID。

您还可以在访问令牌中验证AppID

答案 2 :(得分:0)

此租户中有多少个活动目录环境?确定要在正确的租户中创建Azure AD应用吗?

我相信您可能使用了错误的房客ID。该租户中存在用户ID,但邮箱中没有。

在aad.portal.azure.com/#blade/Microsoft_AAD_IAM/…中,应在oauth URL中使用租户id属性-login.microsoftonline.com/${tenantId}

仔细检查您使用的是正确的