Azure APIM OAuth流程疑问:如何获取Refresh Token
获取Refresh Token的步骤说明
要在Azure APIM的OAuth流程中获取Refresh Token,核心取决于授权类型(Grant Type)的选择、身份提供商的配置以及请求参数的设置,具体操作如下:
1. 确认使用的Grant Type支持Refresh Token
并非所有OAuth授权类型都会返回Refresh Token:
- 仅
authorization_code(授权码模式)、password(密码模式,不推荐用于生产环境)这类带用户上下文的模式会返回Refresh Token; client_credentials(客户端凭证模式)是服务间调用的无用户上下文模式,默认不返回Refresh Token,也无法获取。
2. 确保身份提供商允许颁发Refresh Token
以Azure AD(最常用的APIM OAuth身份提供商)为例:
- 登录Azure门户,进入你的应用注册,在「认证」页面,确认「颁发刷新令牌」选项已启用(默认开启,若为旧应用需检查);
- 必须在请求的
scope参数中添加offline_access特殊范围——这是身份提供商返回Refresh Token的必要条件,它表示允许应用在用户离线时获取刷新令牌。
3. 修改Access Token请求以获取Refresh Token
在你原本获取Access Token的请求中,调整参数:
- 将
scope参数修改为原业务范围 +offline_access,例如:scope=api://your-api-id/access_as_user offline_access - 保持其他参数(
client_id、client_secret、grant_type、access_token_url等)不变,重新发送请求。
成功响应的JSON中,除了access_token,会新增refresh_token字段,这就是你需要的刷新令牌。
4. 使用Refresh Token获取新的Access Token
当原Access Token过期时,可通过Refresh Token获取新令牌:
- 调用同一个
access_token_url,设置grant_type=refresh_token; - 携带参数:
client_id、client_secret、refresh_token(之前获取的刷新令牌),可选指定scope(若需缩小权限范围); - 请求示例(form-data格式):
grant_type: refresh_token client_id: your-client-id client_secret: your-client-secret refresh_token: your-refresh-token
注意事项
- 确保APIM的OAuth策略没有过滤或修改
scope参数,要让offline_access正确传递到后端身份提供商; - Refresh Token有过期时间,部分身份提供商(如Azure AD)会在使用旧Refresh Token时返回新的Refresh Token,建议替换存储的旧令牌以保持有效性。
内容的提问来源于stack exchange,提问作者OpenStack
相关产品推荐
相关产品推荐

