我是一个刚接触 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 不断刷新有效期。所以要如何解决这个问题?我的这个实现流程是否有问题?

希望有经验的大佬解答一下,感激不尽
举报· 378 次点击
登录 注册 站外分享
10 条回复  
linzyjx 小成 2024-10-15 17:39:21
refresh token 一般也是有有效期的吧?不过就是比较长而已。
wonderfulcxm 初学 2024-10-15 17:40:25
可以 revoke 原 app 的 secret code ,我记得 Google 在 refresh token 时需要提供 app id 和 app 的 secret 。
MillaMaxwell 小成 2024-10-15 17:43:15
refresh token 也有有效期,每次获取新的 refresh token 也需要进行验证就可以了
patrickyoung 小成 2024-10-15 17:44:54
看 auth0 文档去,okta 的文档写的很清楚…
RightHand 小成 2024-10-15 17:48:57
token 被盗意味客户端被破解,无解
javalaw2010 小成 2024-10-15 17:50:12
这套流程是没问题的。鉴权跟账号安全是两个场景。

首先你要保证信道的安全,保证 token 的传输过程中不会被截获。那么此时 token 被截获的场景要么就是用户的设备被黑客控制了,要么就是你们的服务端被黑客控制了,而如何防止这两种情况的出现又都是别的话题了。

其次,refresh token 应该是一次性的,用完就丢了。

然后,你可以做一些风控,来弱化盗号的影响,比如限制登录的设备个数,举例限制 2 台设备,第 3 台设备登录后,要主动失效签发给第一台设备的所有 token 。比如 token 和 ip/地区/设备指纹绑定,不符合则认为是无效的 token 。比如引入二因素认证等等。
cheng6563 小成 2024-10-15 17:53:24
做单会话登录,就是用户登录会把其他会话都挤掉。
iyiluo 小成 2024-10-15 17:56:45
定期失效+设备绑定+ip 绑定,看你想做到什么程度
anonydmer 小成 2024-10-15 17:57:11
楼主你用错了吧,ID Token 这个 token 是不能用来访问 api 的,只是用来返回用户信息的; 调用 api 的仍然是 access token ,而它是的有效期是很短期的;
12下一页
返回顶部