如何使用Refresh Token在Azure AD中获取Access Token
排查Refresh Token获取Access Token失败的常见原因及解决方法
核对请求参数完整性与正确性
刷新令牌的POST请求必须包含以下必填参数,缺一不可:grant_type: 固定为refresh_tokenclient_id: 你的应用注册IDrefresh_token: 之前获取到的刷新令牌字符串scope: 必须是之前授权过的范围子集(不能新增未授权范围),比如保持user.read offline_access openid- 若为机密客户端(如后端服务),还需额外传入
client_secret或client_assertion
标准请求示例(表单编码格式):
POST https://login.microsoftonline.com/tenant.com/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=refresh_token &client_id=你的应用ID &refresh_token=你的刷新令牌 &scope=user.read offline_access openid &client_secret=你的应用密钥(机密客户端必填)验证Refresh Token有效性
- 刷新令牌可能已失效:Azure AD默认刷新令牌有效期90天,但用户重置密码、主动撤销应用授权、应用权限变更等操作会直接让刷新令牌失效
- 确认租户一致性:请求的租户(tenant.com)必须和获取刷新令牌时的租户完全一致
- 匹配应用类型:公共客户端(如桌面/移动端APP)不能传入
client_secret,否则会触发权限错误
根据错误码定位问题
失败时Azure AD会返回明确错误码,针对性排查:invalid_grant: 最常见,大概率是刷新令牌过期、无效,或客户端凭据错误,需重新引导用户授权获取新令牌invalid_scope: 请求范围包含未授权权限,或格式错误,需调整为已授权的范围集合unauthorized_client: 应用未被允许使用refresh_token授权类型,需检查应用注册的权限配置
检查应用注册配置
- 确认
offline_access权限已配置并授予:在Azure AD应用注册的「API权限」中,检查该权限已添加且完成管理员/用户授权 - 公共客户端需配置对应平台:在「身份验证」页面勾选对应平台(如移动和桌面应用),并设置正确的重定向URI
- 确认
内容的提问来源于stack exchange,提问作者user000682
相关产品推荐
相关产品推荐

