You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MSGraph-PHP-SDK连接US_GOV国家云失败的问题排查

解决MS Graph PHP SDK连接US_GOV国家云时的AADSTS900382错误

问题概述

使用MS Graph PHP SDK连接US_GOV国家云时,按官方文档配置NationalCloud::US_GOV后仍报错:

AADSTS900382: Confidential Client is not supported in Cross Cloud request.

通过PHP+Curl可正常访问租户并获取信息,但SDK中GraphPhpLeagueAuthenticationProvider未遵循国家云配置,仍使用全球版login.microsoftonline.com端点,导致跨云请求冲突。

解决方案

核心问题是ClientCredentialContext默认使用全球版Azure AD认证端点,需手动指定US_GOV环境的认证权威地址,确保认证与Graph API请求的云环境一致。

修改后的示例代码

<?php
require_once 'vendor/autoload.php';
use Microsoft\Graph\Core\NationalCloud;
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext;

$scopes = ['https://graph.microsoft.us/.default'];

// 应用注册信息
$clientId = 'MY CLIENT ID';
$tenantId = 'MY TENANT ID';
$clientSecret = 'MY CLIENT SECRET';

// 指定US_GOV环境的认证权威地址
$authority = "https://login.microsoftonline.us/$tenantId";
$tokenRequestContext = new ClientCredentialContext($tenantId, $clientId, $clientSecret, $authority);

$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes, NationalCloud::US_GOV);
$user = $graphServiceClient->users('USER@MYDOMAIN.COM')->get();

echo "<pre>";
print_r($user);
echo "</pre>";
?>

原理说明

  • 默认ClientCredentialContext会使用全球版Azure AD的权威端点(login.microsoftonline.com),即使GraphServiceClient指定了NationalCloud::US_GOV,认证上下文的端点未同步,导致认证请求发往全球云,而Graph API请求发往US_GOV云,触发跨云请求的权限限制。
  • 手动指定US_GOV环境的权威地址(login.microsoftonline.us)后,认证请求与Graph API请求将统一指向US_GOV云环境,解决AADSTS900382错误。

内容的提问来源于stack exchange,提问作者Zac Mussatt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:25:02