是否可查询token生命周期,能否通过API校验token有效性避免重复生成?
方案实现说明
该需求完全可以通过OpenStack Keystone V3 API实现,核心逻辑为优先验证已有token有效性,仅当token失效时再触发新token生成流程。
核心实现逻辑
- 本地新增token缓存机制,每次生成新token时,同步存储token值和对应的过期时间到本地文件(例如
~/.os_token_cache) - 脚本运行时首先读取本地缓存,无缓存则直接走现有流程生成新token并更新缓存
- 有缓存时优先判断当前时间是否早于缓存的过期时间,未过期可直接复用;若临近过期(例如距离过期不足5分钟)或已过期,再调用token校验接口确认有效性,确认失效后再重新生成
校验token的API调用方法
使用如下curl命令即可校验token有效性,将待校验的token填入对应参数位置即可:
curl --silent -i --cacert "$OS_CACERT" \ -X GET "$OS_AUTH_URL/v3/auth/tokens" \ -H "X-Auth-Token: $SYS_TOKEN" \ -H "X-Subject-Token: $SYS_TOKEN"
- 返回200状态码代表token有效,响应体中可提取
expires_at字段更新本地缓存的过期时间 - 返回401状态码代表token已失效,直接走新token生成流程即可
你当前的生成token命令存在语法问题,修正后可参考如下写法:
export SYS_TOKEN=`curl --silent -i --cacert "$OS_CACERT" \ -X POST $OS_AUTH_URL/v3/auth/tokens -d '{"auth":{"identity":\ {"methods":["password"],"password":{"user":{"name": "'$USERNAME'", "domain":\ {"name": "default"}, "password": "'$PASSWORD'"}}}}}' \ -H 'Content-type: application/json' | \ awk -F ':' '/^X-Subject-Token/ {print $2}' | sed -e 's/\r$//' | xargs`
优化建议
如果对token有效性的校验精度要求不高,可直接对比本地缓存的过期时间与当前时间判断有效性,无需每次都调用校验接口,能进一步降低请求开销,绝大多数业务场景都适用。
内容的提问来源于stack exchange,提问作者Kaber
相关产品推荐
相关产品推荐

