ACCESS_TOKEN与FRESH_TOKEN

本文详细介绍了OAuth2.0中的刷新令牌(refresh_token)机制,解释了其如何增强系统的安全性,并讨论了使用刷新令牌的风险及防范措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OAuth1.0中的access_token过期时间通常很长,安全性差。于是OAuth2.0推出了refresh_token。

OAuth2.0中,客户端用账户名,密码经过一定方式(比如先请求code),获得ACCESS_TOKEN,expire_in与refresh_token。 
然后在expire_in到期的时候,通过refresh_token获得新的access_token,expire_in,与refresh_token。 
refresh_token也有过期时间,当refresh_token过期的时候,则需要用户重新授权登录。 
注意: 
refresh_token只有在用户长期没有请求的情况下才会过期,因为每次请求token都会获得新的值。

那么这里有个风险:基本上,黑客一旦获得用户的access_token与refresh_token,而且用户之后的一段时间都没有更新,或者不再用这个app了,那么黑客就可以一直以用户的身份进行一些访问。 
当然,如果用户在别的地方再次通过用户名密码登录的话,则原来的access_token与refresh_token自然失效。

进而想到,为了防止一次泄露,造成一段时间内的账户不安全,app客户端应该在后台自动定时用refresh_token请求新的token值。这样,token及时变更,旧token有效时间减少,安全性也可得到一定的提高。

参考文章: 
http://blog.youkuaiyun.com/wenlei_zhouwl/article/details/7256082 
http://www.cnblogs.com/dudu/p/oauth-refresh-token.html

### 如何在 Apifox 中验证 Token 在 Apifox 中,可以通过编写预请求脚本来实现对 API 请求中的 `Token` 进行验证。这通常用于确保每次发送请求时使用的 `Token` 是有效的,并且可以动态更新或校验其状态。 以下是具体方法: #### 使用 Pre-request Script 验证 Token 的有效性 Apifox 提供了强大的脚本功能来支持开发者自定义逻辑操作。通过 **Pre-request Script**(预请求脚本),可以在实际发起 HTTP 请求之前执行一段 JavaScript 脚本来完成诸如 Token 校验的任务[^1]。 如果当前存储的 `Token` 已经过期或者无效,则可以根据业务需求重新获取新的 `Token` 并保存到环境变量中以便后续调用。 下面是一个简单的例子展示如何利用 `pm.sendRequest()` 函数向服务器端查询现有 `Token` 是否仍然有效;如果不合法则尝试刷新它: ```javascript const currentToken = pm.environment.get("auth_token"); // 获取环境变量 auth_token 值 // 定义一个函数用来检查 token 是否有效 function checkTokenValidity(token) { const url = "https://example.com/api/check-token"; // 替换为真实的接口地址 let reqOptions = { method: 'POST', header: { Authorization: `Bearer ${token}` }, body: {} }; pm.sendRequest({url, ...reqOptions}, (err, res) => { if (!err && res.code === 200 && JSON.parse(res.text()).isValid) { console.log('Current token is valid.'); } else { refreshAccessToken(); // 如果无效就触发刷新流程 } }); } // 当前 token 失效后的处理机制 - 刷新 access token function refreshAccessToken() { const refreshTokenUrl = "https://example.com/api/refresh-access-token"; pm.sendRequest(refreshTokenUrl, function(err, response){ if(!err && response.json().new_access_token){ var newAccessToken = response.json().new_access_token; // 更新全局配置里的 token 字段 pm.environment.set("auth_token", newAccessToken); console.log(`Access token refreshed successfully! New value=${newAccessToken}`); }else{ throw Error("Failed to obtain a fresh access token."); } }); } checkTokenValidity(currentToken); // 执行初始检测过程 ``` 以上代码片段展示了两个主要部分: 1. **`checkTokenValidity`**: 向指定的服务端 URL 发送 POST 请求以确认给定的 `Token` 是否处于活动状态。 2. **`refreshAccessToken`**: 若发现原 `Token` 不再适用,则联系授权服务生成一个新的替代品并将其存入相应的环境设置里。 注意:上述示例仅作为指导用途,请根据实际情况调整具体的网络路径以及数据结构等内容。 --- ### 注意事项 - 确保所依赖的身份认证方案遵循 OAuth 或其他标准协议的要求。 - 对敏感信息采取加密措施保护传输安全。 - 测试阶段建议模拟不同场景下的行为表现,比如正常续签 vs 强制登出等情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值