获取Microsoft Graph Access Token时遇AADSTS90014错误求助
解决Microsoft Graph API获取Access Token时的AADSTS90014错误
这个错误提示已经说得很清楚——你的POST请求体里缺少必填的grant_type参数,这是OAuth 2.0授权码流程里必须提交的核心参数。针对你用授权码换取Access Token的场景,grant_type的值要固定设为authorization_code。
我帮你修正了POST请求代码,补上了缺失的参数,同时确保所有必要参数都正确传递:
<?php $clientId = "XXXXXXXXX-ded0-4150-80c6-37e326ff6b26"; $clientSecret = "XXXXXXXXXXuakCZYA701@#!"; $redirectUri = "你的回调地址(需和Azure AD配置的完全一致)"; $authorizationCode = "你实际获取到的授权码"; // 替换成真实授权码 // 构建完整的POST请求参数 $postData = [ 'grant_type' => 'authorization_code', // 必须添加的核心参数 'client_id' => $clientId, 'client_secret' => $clientSecret, 'code' => $authorizationCode, 'redirect_uri' => $redirectUri ]; // 初始化cURL请求 $ch = curl_init('https://login.microsoftonline.com/common/oauth2/v2.0/token'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); // 用表单编码格式发送 curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded' ]); // 执行请求并处理响应 $response = curl_exec($ch); if (curl_errno($ch)) { echo 'cURL请求错误: ' . curl_error($ch); } else { $tokenData = json_decode($response, true); if (isset($tokenData['access_token'])) { echo 'Access Token获取成功: ' . $tokenData['access_token']; } else { echo '请求失败: ' . $response; } } curl_close($ch); ?>
另外还有几个关键细节需要你核对:
redirect_uri必须完全匹配:和你在Azure AD应用注册里配置的"重定向URI"完全一致,包括大小写、是否带结尾斜杠等,哪怕细微差异都会触发错误。- 参数编码格式:必须用
application/x-www-form-urlencoded格式发送(代码里用http_build_query处理了参数),不能用JSON格式,否则微软授权服务器无法解析。 - 授权码的有效性:授权码只能使用一次,用过即失效,确保你用的是刚获取的有效授权码。
内容的提问来源于stack exchange,提问作者Rodniko
相关产品推荐
相关产品推荐

