繁体   English   中英

为什么我在 Microsoft Graph API 调用中收到“401 Unauthorized”?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM