![](/img/trans.png)
[英]How do i call an API using php curl correctly? I am getting http status code of 401
[英]Why am I Getting "401 Unauthorized" for Microsoft Graph API Call?
我在租户 A 中创建了应用程序并将其添加到租户 B。我已授予两个租户的权限。 为什么每次调用应用程序时都会收到此响应?
resulted in a `401 Unauthorized` response: {"error":{"code":"NoPermissionsInAccessToken","message":"The token contains no permissions, or permissions can not be un (truncated...)
这是我正在发出的 PHP 请求(我正在使用租户 A 中应用程序的客户端 ID 和客户端密码):
<?php
use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use Microsoft\Graph\Graph;
$guzzle = new \GuzzleHttp\Client();
$tenantId = 'common';
$clientId = 'ccc-ddd-fff';
$clientSecret = 'xxx-yyy-zzz';
$url = 'https://login.microsoftonline.com/' . $tenantId . '/oauth2/token?api-version=1.0';
try {
$token = json_decode($guzzle->post($url, [
'form_params' => [
'client_id' => $clientId,
'client_secret' => $clientSecret,
'resource' => 'https://graph.microsoft.com/',
'grant_type' => 'client_credentials',
],
])->getBody()->getContents());
$accessToken = $token->access_token;
} catch (\Exception $e) {
print $e->getMessage();
}
$graph = new Graph();
$graph->setAccessToken($accessToken);
try {
print_r($graph->createRequest("GET", '/users/email@email.com/messages/xxxxxxxxxxxxx==')->execute());
} catch (\Exception $e) {
print $e->getMessage();
}
两个租户都授予了以下权限:租户 A 和 B 中的权限
首先,根据api 文档,你最好添加Mail.ReadBasic.All
应用程序权限,但我不确定它是否影响你在这里调用。
您的问题主要来自您使用$tenantId = 'common';
,您应该将其设置为您要为其调用 api 的租户名称(例如 xxx.onmicrosoft.com)。 我的意思是,如果你想调用/users/xxx@tenantA.com/messages
,你应该把tenantA的租户id/name 放到$tenantId
变量中,但是当你想调用/users/yyy@tenantB.com/messages
时,你应该设置租户B。
下面的屏幕截图显示了当我使用由common
但不是我的租户名称生成的令牌时的场景。
401 未经授权的错误:您的令牌有效吗?
确保您的应用程序在请求中向 Microsoft Graph 提供有效的访问令牌。 此错误通常意味着 HTTP 身份验证请求 header 中可能缺少访问令牌,或者令牌无效或已过期。 我们强烈建议您使用 Microsoft 身份验证库 (MSAL) 获取访问令牌。 此外,如果您尝试使用授予个人 Microsoft 帐户的委派访问令牌来访问仅支持工作或学校帐户(组织帐户)的 API,则可能会出现此错误。
您始终可以利用jwt.ms来检查您的令牌的声明。 使用它并检查您是否具有调用 API 端点的必要权限。
我需要做的是提示 Microsoft 管理员使用与此类似的链接授予权限。 仅从微软添加企业
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=offline_access+openid+profile+User.Read+Mail.ReadWrite+Mail.Send
&response_type=code
&client_id=a62b0808-2b1f-4efc-a3d6-ad1223dc06a9
&redirect_uri=https://myurl/blah.html
&response_mode=query
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.