PHP使用OAuth刷新令牌获取Office365邮箱访问令牌报错求助
Office365 OAuth刷新令牌报错AADSTS65001解决方法
问题描述
我对Azure/Office365工作流程不熟悉,目前对接Office365邮箱时遇到刷新令牌流程问题。可以通过ClientID和ClientSecret获取访问令牌(Access Token)与刷新令牌(Refresh Token),但使用刷新令牌获取新访问令牌时始终返回错误。
编写的PHP代码如下:
$CLIENT_ID="...."; $CLIENT_SECRET="..."; $TENANT="..."; $REFRESH_TOKEN="..."; $url= "https://login.microsoftonline.com/$TENANT/oauth2/v2.0/token"; $param_post_curl = [ 'client_id'=>$CLIENT_ID, 'client_secret'=>$CLIENT_SECRET, 'refresh_token'=>$REFRESH_TOKEN, 'grant_type'=>'refresh_token' ]; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($param_post_curl)); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); $oResult=curl_exec($ch);
执行后返回错误:
"error":"invalid_grant","error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID '7xxx...'
解决步骤
- 检查应用权限配置
- 登录Azure门户,找到对应应用注册,进入「API权限」页面。
- 确认已添加Office365邮箱相关权限(如
Mail.Read、Mail.Send),且权限类型匹配你的业务场景(委派权限用于用户上下文,应用权限用于后台服务)。
- 完成权限同意操作
- 若使用委派权限:首次获取令牌的授权流程中,用户必须完成权限同意步骤;
- 若使用应用权限:需要租户管理员在「API权限」页面点击「授予管理员同意」,完成租户级别的权限授权。
- 重新获取有效刷新令牌
- 原刷新令牌可能因未完成同意流程而过期或无效,重新走完整的OAuth授权流程,确保用户/管理员完成权限同意后,获取新的刷新令牌再尝试请求。
- 验证请求参数正确性
- 确认
TENANT参数为正确的租户ID,或根据应用类型选择common/organizations; - 检查
grant_type是否严格为refresh_token,所有参数无拼写错误。
- 确认
内容的提问来源于stack exchange,提问作者Momomo
相关产品推荐
相关产品推荐

