如何在WSO2 API Manager中区分获取可用访问令牌与刷新令牌?
WSO2 API Manager中区分获取可用令牌与刷新令牌的操作方法
一、不同授权类型的操作区分
1. Password/Refresh Token授权类型
- 生成新令牌(旧令牌立即失效):直接调用
/oauth2/token接口,传入grant_type=password,附带用户名、密码、客户端ID和密钥。这是WSO2默认的单会话逻辑,每次调用都会生成全新令牌,旧令牌直接作废。 - 刷新令牌(获取新令牌,旧令牌可按需保留有效性):使用
grant_type=refresh_token调用接口,传入有效的refresh_token、客户端ID和密钥。默认生成新access_token后旧令牌会失效,但可以通过配置调整,让旧令牌在自身有效期内继续可用。
2. Client Credentials授权类型
- 生成新令牌:调用
/oauth2/token接口,传入grant_type=client_credentials,每次调用都会生成新令牌,旧令牌直接失效。 - 复用已有令牌:这种授权类型没有refresh_token,需要在客户端层面缓存未过期的access_token,只有当令牌过期后再重新调用接口获取新令牌。
3. JWT/SAML2授权类型
- 生成新令牌:分别使用
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer或grant_type=urn:ietf:params:oauth:grant-type:saml2-bearer调用接口,每次调用都会生成新令牌,旧令牌失效。 - 复用已有令牌:同样需要客户端自行缓存未过期的令牌,待令牌过期后再重新发起获取请求。
二、调整WSO2的令牌复用行为
如果希望用refresh_token刷新令牌时,旧access_token在有效期内仍能使用,可修改deployment.toml配置:
[oauth.token_validation] enable_token_reuse = true
开启该配置后,用refresh_token获取新令牌时,旧令牌不会立即失效,直到自身过期;但password模式重复获取时还是会生成新令牌并作废旧令牌,因为这属于新的登录会话。
三、客户端最佳实践
- 无论哪种授权类型,客户端都要缓存已获取的access_token,每次调用API前先解析令牌的
exp字段判断是否过期。 - 只有当令牌过期或者验证失败时,再按授权类型选择对应方式获取新令牌:
- 有refresh_token的类型:优先使用
refresh_token模式刷新令牌。 - 无refresh_token的类型:重新调用对应grant_type的接口生成新令牌。
- 有refresh_token的类型:优先使用
内容的提问来源于stack exchange,提问作者Ehsan
相关产品推荐
相关产品推荐

