请问 OAuth 中的 access_token 为什么需要过期

2018-06-12 16:08:00 +08:00
 cc959798

为什么需要设置国企 refresh_token 来刷新 access_token,有些人说是因为 Access_token 会过期,refresh_token 也会过期,为什么不设计成 access_token 和 refresh_token 一样长的过期时间,然后 refresh_token 就不需要了,反正 refresh_token 也会过期

9874 次点击
所在节点    Java
52 条回复
q397064399
2018-06-12 23:10:30 +08:00
@chinvo #40

如果刷新 token,还要另外再弄一套认证鉴权机制
我觉得意义就不是很大了,token 跟 refresh_token 的存在
本身就是因为穿了加密协议这条内裤, 假如客户端自己不能保护好 token 跟 refresh_token
那其它的鉴权机制 也无法保证 用户的认证信息


之前 Linus 邮件里面 就批评了那些安全专家, 我觉得 Linus 的观点很正确,
安全的重点从来是人,而不是程序机制,任何机制都无法避免 看守金库的老大爷喝醉之后被小姐骗走钥匙
march1993
2018-06-12 23:27:35 +08:00
@chinvo 我觉得如果你提 IdP 和 SP 的话属于另外一个范畴了,IdP 和 access_token、refresh_token 解决的是两个不同的问题吧?
chinvo
2018-06-12 23:28:44 +08:00
@march1993 呃,access_token 和 refresh_token 就是 IdP 发给你( client )的啊
Foolt
2018-06-13 00:29:24 +08:00
@march1993

如果只有访问令牌,刷新直接用访问令牌,这意味着用户的访问令牌一旦泄露,黑客可以立即用访问令牌刷新令牌,令你服务器的访问令牌失效,你再想刷新你都刷新不了。这时黑客就可以一直使用访问令牌,直到用户取消授权或者刷新授权。

刷新令牌就是解决这个问题的,刷新令牌长期有效,访问令牌短期有效,就算用户泄露了访问令牌,你服务器也可以通过刷新令其失效,退一步讲,即使没刷新,最多几个小时(一般是一两个小时)就失效了。不会出现用访问令牌刷新,一旦泄露黑客就取代你的情况。
icz
2018-06-13 08:12:05 +08:00
@chinvo 这么说我怎么觉得 refresh token 放在 agent 上更安全? refresh token 只要不配合 client secret 就是无效的,而 refresh token 相当于是一个临时的用户密码,这样不就相当于在客户端的服务器上明文存用户密码了..?客户端服务器如果被攻破 client secret 和 refresh token 就会一起泄漏。如果 refresh token 放在 agent 上,client 接收 agent 的刷新请求(并用自己的手段认证 agent )再向 oauth 认证服务器请求会不会更好一些?
catinred
2018-06-13 11:13:59 +08:00
要分两种情况来讨论,不要混淆在一起。1.通讯线路被黑,例如 MITM。2.客户端被破解。
CoderGeek
2018-06-13 16:03:51 +08:00
refresh_token 未过期 直接申请新的 access_token
refresh_token 过期 重新登录获取授权的 access_token 和 refresh_token
CoderGeek
2018-06-13 16:06:57 +08:00
你要是觉得 OAuth 麻烦 可以用 JWT 简单 或者看看 Apache OAuth2.0 的介绍上面有流程
https://tools.ietf.org/html/rfc6749#section-1.5
CoderGeek
2018-06-13 16:09:03 +08:00
如果你自己做个开放平台 类似微博 微信 百度 豆瓣 他们都是这样的流程 = = 看他们 授权介绍 ...虽然有的实现很乱
但基本都是按照 OAuth2.0 来的
mingyun
2018-12-18 22:10:44 +08:00
JacobAngle
2019-12-03 14:20:37 +08:00
我还是不理解 refresh_token 怎么用才会安全? refresh 请求另一个接口来获取 access_token,那么别人知道 refresh_token 了也就很容易获取到 access_token 了呀?难道是以为别人不知道 refresh_token 的接口?通过分析是很明显就会知道的呀。所以 refresh_token 到底是怎么个安全呢?只是避免在网络传输中被截获?那直接 https 是不是就不会被截获了?那还要 refresh_token 有何用?很迷惑~!
lubberland666
2020-05-29 18:14:54 +08:00
fuck 深感同意 @JacobAngle 上面有同学说 refresh_token 放在服务端 刷新的时候 需要另外一套鉴权机制来保证刷新过程, 如果一套鉴权机制 需要另外一套鉴权机制来保证安全,那感觉没啥太大意义了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX