WSO2 APIM 4.1.0刷新令牌异常过期问题求助
WSO2 APIM 4.1.0 刷新令牌相关问题
问题背景
我们将WSO2 APIM从2.6.0版本升级到4.1.0后,遇到了刷新令牌相关的异常问题。旧版本中同一scope的请求会复用有效令牌,新版本每次请求都会生成新令牌,这一点本身我们可以接受。
具体异常现象
- 使用password flow时,每次请求返回的access token都不同,但refresh token始终保持一致
- 调用
/token端点的refresh_token flow时,旧access token仍处于有效状态,但旧refresh token会直接失效 - 接口响应仅包含access token、refresh token以及access token的
expires_in字段,未提供refresh token的过期时间信息
测试验证情况
我们将access token的有效期设置为60秒,refresh token的有效期设置为90秒,但实际测试发现:
- 仅过了40秒,旧refresh token就已失效,调用时返回
"invalid_grant"错误 - 实际表现与官方文档描述不符,同时revoke功能也无法正常工作
核心疑问
- 作为客户端,如何知晓refresh token的过期时间?
- 如何配置APIM,使refresh token的有效期至少不短于其对应的access token?
测试脚本
#!/bin/bash ACCESS_TOKEN= REFRESH_TOKEN= ORIGINAL_REFRESH_TOKEN= EXPIRES_IN= RESPONSE= while true; do CALL_DATE=$(date --iso-8601=s) RESPONSE=$(curl -X POST https://api-temy-carc.internal.carus.com/token -d "grant_type=password&username=apiuser&password=1234&scope=device_baz" -H "Authorization: Basic amZXNGkyRkdMY1JTYjk5MWFXTkhnVEcyRVJNYTpnclQ5bFY2RldKY2x5VGh1WDBXSng3ZlNyRXdh") REFRESH_TOKEN=$(echo "$RESPONSE" | jq -r .'refresh_token') EXPIRES_IN=$(echo "$RESPONSE" | jq -r '.expires_in') if [[ -z "$ORIGINAL_REFRESH_TOKEN" ]]; then ORIGINAL_REFRESH_TOKEN=$REFRESH_TOKEN echo -e "$CALL_DATE\t$REFRESH_TOKEN\tFirst call\t$EXPIRES_IN" elif [[ "$ORIGINAL_REFRESH_TOKEN" == "$REFRESH_TOKEN" ]]; then echo -e "$CALL_DATE\t$REFRESH_TOKEN\tSame refresh\t$EXPIRES_IN" else echo -e "$CALL_DATE\t$REFRESH_TOKEN\tNew refresh\t$EXPIRES_IN" echo "Trying original refresh token" sleep 1 curl -k -d "grant_type=refresh_token&refresh_token=$ORIGINAL_REFRESH_TOKEN" -H "Authorization: Basic amZXNGkyRkdMY1JTYjk5MWFXTkhnVEcyRVJNYTpnclQ5bFY2RldKY2x5VGh1WDBXSng3ZlNyRXdh" https://api-temy-carc.internal.carus.com/token | jq . exit fi sleep 10 done
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

