OAuth 认证机制下,如果 Token 被窃取了是否意味了账号被盗?有办法减轻影响吗?

查看 116|回复 11
作者:a1528zhang   
我是一个刚接触 OAuth 的新手,最近刚接入了 auth0 的身份验证。
我们的产品是一个 web app ,然后后端作为 auth0 的客户端,保存了 auth0 返回的 access Token, refresh Token , 然后将 ID Token 加密后放到前端,作为用户的登录凭证。用户调用我们的后端 api 的时候直接验证一下 ID Token 是不是合法,然后就直接做用户操作了。
然后我们为了用户体验使用了 refresh Token 来刷新用户的 ID Token ,当 ID Token 过期的时候就调用一下后端的 api ,后端再到 auth0 去请求新的 token ,然后更新 access Token, refresh Token ,再把新的 ID Token 返回给用户。
我的疑问是,当用户的 ID Token 被获取了,在这套机制下就等于是账号全部失窃了,因为攻击者可以利用 refresh Token 不断刷新有效期。所以要如何解决这个问题?我的这个实现流程是否有问题?
希望有经验的大佬解答一下,感激不尽
linzyjx   
refresh token 一般也是有有效期的吧?不过就是比较长而已。
wonderfulcxm   
可以 revoke 原 app 的 secret code ,我记得 Google 在 refresh token 时需要提供 app id 和 app 的 secret 。
MillaMaxwell   
refresh token 也有有效期,每次获取新的 refresh token 也需要进行验证就可以了
patrickyoung   
看 auth0 文档去,okta 的文档写的很清楚…
a1528zhang
OP
  
@linzyjx 一般来说 refresh token 的有效期在几个月,而且如果我使用 refresh token rotate 的机制,会导致后端总是会存放一个有效的 refresh token ,这样如果攻击者用盗来的 ID token 调用我后端的 api 来刷新 token ,就会一直有权限了
a1528zhang
OP
  
@patrickyoung 文档翻了很多次了,可能我理解有误,没找到能解答疑问的内容
RightHand   
token 被盗意味客户端被破解,无解
a1528zhang
OP
  
@MillaMaxwell 我们用了 refresh token rotate 的机制,目的是为了实现免登录,会导致 refresh token 会不断更新,这样 refresh token 就总是会有一个有效的
javalaw2010   
这套流程是没问题的。鉴权跟账号安全是两个场景。
首先你要保证信道的安全,保证 token 的传输过程中不会被截获。那么此时 token 被截获的场景要么就是用户的设备被黑客控制了,要么就是你们的服务端被黑客控制了,而如何防止这两种情况的出现又都是别的话题了。
其次,refresh token 应该是一次性的,用完就丢了。
然后,你可以做一些风控,来弱化盗号的影响,比如限制登录的设备个数,举例限制 2 台设备,第 3 台设备登录后,要主动失效签发给第一台设备的所有 token 。比如 token 和 ip/地区/设备指纹绑定,不符合则认为是无效的 token 。比如引入二因素认证等等。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部