Insomnia配置OAuth 2.0 password授权模式自动获取AccessToken调用其他API报错
解决Insomnia OAuth 2.0密码模式自动获取token报错问题
你遇到的Failed to fetch token url= state us=0报错,90%以上是内置OAuth配置时多填了冗余参数、或者参数格式不符合Keycloak要求导致,可通过以下两种方案实现自动绑定token,无需手动复制:
方案1:直接使用Insomnia内置OAuth 2.0认证(推荐)
操作步骤如下:
- 打开需要自动携带token的业务请求,切换到「Auth」标签,认证类型选择
OAuth 2.0 - 授权类型(Grant Type)选择
Resource Owner Password Credentials - 严格按照以下规则填参数,不要多填非必填项:
- Access Token URL:填写curl请求里的地址
https://mydomain/auth/realms/my-app/protocol/openid-connect/token - Client ID:填写
myclientid,Client Secret字段必须留空(你的应用是公开非保密客户端,传了client secret反而会被Keycloak拦截) - Username、Password分别填写对应账号
app.admin、密码password! - 展开「Advanced」高级设置,确认
Content Type选择application/x-www-form-urlencoded,不要选JSON格式
- Access Token URL:填写curl请求里的地址
- 点击「Get New Access Token」,正常获取token后选择「Use Token」,后续token过期时Insomnia会自动刷新,无需手动操作
方案2:环境变量+脚本实现(和Postman pre-request逻辑一致)
如果有自定义的token获取逻辑,可以用这套方案:
- 先在当前工作区的环境配置中,新增两个变量:
access_token、token_expire_at,初始值留空即可 - 找到你之前导入的、能正常返回token的POST请求,切换到「Scripts」标签,在「After Response」区域填入以下脚本:
// 解析token接口返回结果 const tokenRes = await response.json(); // 保存token到环境变量 await insomnia.environment.set('access_token', tokenRes.access_token); // 计算过期时间,提前1分钟刷新避免请求时token刚好过期 const expireTime = Date.now() + (tokenRes.expires_in - 60) * 1000; await insomnia.environment.set('token_expire_at', expireTime);
- 给所有需要携带token的业务请求,切换到「Pre-request Script」区域,填入以下逻辑:
// 读取当前环境存储的token和过期时间 const currentToken = await insomnia.environment.get('access_token'); const expireAt = await insomnia.environment.get('token_expire_at'); // 无token或者token即将过期时,自动调用获取token的接口 if (!currentToken || Date.now() > expireAt) { // 引号里的内容替换为你自己的token请求ID:在token请求的地址栏右侧点三个点,选择「Copy Request ID」即可获取 await insomnia.sendRequest('req_替换为你的token请求ID'); }
- 最后给业务请求添加请求头:
Authorization,值为Bearer {{access_token}}即可实现自动携带token
内容的提问来源于stack exchange,提问作者user1184777
相关产品推荐
相关产品推荐

