交换 AccessToken,returns 错误 "invalid_grant" 代码 9002313

Exchanging AccessToken, returns error "invalid_grant" code 9002313

我试图从 Outlook 加载项获取用户的访问令牌,然后将其交换为图形 api 令牌,但出现此错误:

{
    "error": "invalid_grant",
    "error_description": "AADSTS9002313: Invalid request. Request is malformed or invalid.\r\nTrace ID: 4e9c3fab-96b3-4d26-a947-969da5ada400\r\nCorrelation ID: 7bdd112e-5afd-4468-bdac-0586e8dfe2b4\r\nTimestamp: 2022-05-09 10:18:27Z",
    "error_codes": [
        9002313
    ],
    "timestamp": "2022-05-09 10:18:27Z",
    "trace_id": "4e9c3fab-96b3-4d26-a947-969da5ada400",
    "correlation_id": "7bdd112e-5afd-4468-bdac-0586e8dfe2b4",
    "error_uri": "https://login.microsoftonline.com/error?code=9002313"
}

我是这样打电话的:

这是我获取访问令牌的方式:

    OfficeRuntime.auth
      .getAccessToken({ allowConsentPrompt: true, allowSignInPrompt: true, forMSGraphAccess: true })
      .then((res) => { ...

这些是我的权限:

我试图在我的环境中重现同样的错误。我已经注册了一个 Azure AD 应用程序并授予了如下相同的权限:

我在 Postman 中包含了以下参数并成功获得了访问令牌。

为了重现同样的错误,我用一些标记值替换了 code 的值并得到如下结果:

因此,出现该错误的原因是 code 参数提供了错误的值

要获得正确的 code 值,请尝试形成一个 授权 URL,如下所示:

https://login.microsoftonline.com/your_tenant_id/oauth2/v2.0/authorize?client_id=your_client_id&response_type=code& redirect_uri=your_redirect_uri&response_mode=query&scope=user.read openid profile offline_access email mail.read files.read.all &state=12345

在浏览器中打开上述URL,select您的帐户并接受权限同意。您可以在地址栏中找到 code 值,如下所示。

复制该值并用此替换之前的code参数值,您将成功获得访问令牌。