JSON Web Token 如何保证 token 的安全性?

2019-08-22 16:22:16 +08:00
 Zach369

事情的起因: 之前一直跟安卓和 ios 做 api,使用 jwt 的形式进行交互。

今天突发奇想,如何保证 token 的安全性那。假如我拿到 token 就可以调用服务器端的任何接口。这是多么的可怕。

目前为上线的项目都是 https。

求解???
7427 次点击
所在节点    程序员
36 条回复
oott123
2019-08-22 16:30:55 +08:00
假如我拿到你的帐号密码,我可以登录你的帐号,这是多么的可怕。
miaomiao0323
2019-08-22 16:34:16 +08:00
token 不要放在 get 的参数里,容易通过 referer 泄漏。
XRR
2019-08-22 16:34:20 +08:00
token 劫持,可以校验登陆的 ip 和调用接口时的 ip,如果有不同就要求用户重新登陆
diferent
2019-08-22 16:42:47 +08:00
@XRR 移动端怎么办. 高铁,开发换基站. 家里移动网络和 WIFI 互换. 互联网场景没有哪家会这么严格的. 除非是银行金融 APP
baiyi
2019-08-22 16:47:27 +08:00
@XRR #3 这样用户体验太差了,不建议这么做

有 https 防中间人就够了,你没有办法保证用户不会丢失 token,就像你没有办法保证用户不会将密码告诉别人一样

不过可以做一些措施保证用户丢失 token 后,你能尽量减少损失,或者通知用户。比如说刷新 token,判断常用 ip 等方法
baiyi
2019-08-22 16:48:39 +08:00
@baiyi #5 常用 ip -> 常用地址
jorneyr
2019-08-22 16:48:59 +08:00
你拿到 cookie 一样可以调用服务器端的任何接口,所以 token 和 cookie 没有本质区别。
codeyuyu
2019-08-22 17:00:32 +08:00
所以 安全性强的不会用 jwt,因为无状态和吊销无法两全
AreYou0k
2019-08-22 17:02:10 +08:00
建议用脑电波登录
arrow8899
2019-08-22 17:12:44 +08:00
汗。。。只要你用了 HTTPS,双向证书校验,数据库密码加密 + hash,日志脱敏,那么别人基本不可能获取到用户的 token,除非用户主动把密码告诉别人,这种你可以参考支付宝的风控技术。
maichael
2019-08-22 17:18:50 +08:00
你不防中间人,你用啥鉴权都有这问题呀。
chinvo
2019-08-22 17:19:12 +08:00
如果你认为你担心的问题 https 不能解决,那么你所担心的就是反机器人问题
guokeke
2019-08-22 17:36:31 +08:00
登录的时候手机二次验证 :>
flyingghost
2019-08-22 17:50:03 +08:00
假如我拿到你的手机,我可以查看修改你的所有数据,这是多么的可怕!
所以说我们应该抛弃手机吗?
既然很难有什么技术是“绝对安全”的,我们就需要唾弃所有那些有漏洞的技术方案吗?

安全从来都是有限制有范围的相对安全。请在明确定义安全防护能力的前提下选择技术方案。
如果你需要考虑 token 失密问题,那就给方案打补丁(比如缩短 token 有效期)或者换方案(比如双端证书)。
如果你需要考虑密码失密问题,那就上指纹上虹膜。
如果你需要考虑手机丢失问题。。。
如果你需要考虑用户已叛国成为间谍问题。。。

你可以无限制的加高安全壁垒,相应的你需要付出相应的成本。
lurenw
2019-08-22 17:56:14 +08:00
token 不保证安全, 保证安全的是 HTTPS
tachikomachann
2019-08-22 17:58:38 +08:00
jwt 有别于其他方式的安全问题在于,不依赖服务端保存 token 的话,无法实现某个 jwt 主动失效(非过期失效)。
所以要么缩短每个 jwt 的有效期,要么还是要服务端再存一份。
Mutoo
2019-08-22 19:50:35 +08:00
1) Rule-Based Access Control: 将接口权限分散,各 token 执有的权限不尽相同,切不可一个 token 拥有所有权限。
2) 对不同的权限设置合理的过期时间。
3) 传输 token 时使用 https 并把 token 放在 request header 的 auth 字段。保证 token 不被中间人获取,不进入日志系统。
areless
2019-08-22 20:51:18 +08:00
jwt 有鬼 ip 客户端特征,就用字符串混淆了一下便是现代 api 的通用方案了(笑)。公网只能判断客户端特征。内网绑定 mac 固化 arp,靠网络技术而非编程技巧了
Varobjs
2019-08-22 22:19:54 +08:00
@arrow8899 请教一下,日志脱敏很有必要吗?日志不是给开发调试看的吗,难道不是越详细越好?举个例子,数据库连接失败,密码都错配置了,如果脱敏那就看不到有效信息了
1762628386
2019-08-22 22:21:45 +08:00
别把 token 当会话使用,一个功能一个 token

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

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

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

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

© 2021 V2EX