关于前端 token 安全问题

2020-08-05 10:18:59 +08:00
 BruceXHe
前端:VUE

后台:.NET CORE REST API

现在我们后台的接口,需要 TOKEN,TOKEN 通过 clientId,clientKey 获取的(非用户输入用户名和密码),
目前只有把 clientId,clientKey 配置在 VUE 代码里用于获取 TOKEN,但是这样就不安全了。

请问大家有什么办法?
9379 次点击
所在节点    Vue.js
88 条回复
CEBBCAT
2020-08-05 10:23:21 +08:00
clientId,clientKey 哪里来的? token 不能存到 cookie 里面吗?
BruceXHe
2020-08-05 10:26:23 +08:00
@CEBBCAT clientId,clientKey 是一个固定的值,token 可以存储,但是别人知道了 clientId,clientKey 就可以获取到 token
takemeaway
2020-08-05 10:28:22 +08:00
建议参考微信支付的 token 是怎么设计的。
yaphets666
2020-08-05 10:28:34 +08:00
写死在前端没事 前端代码也是会压缩 混淆的 看不出来的
dubenshu
2020-08-05 10:29:46 +08:00
可以使用 Vault 来管理 secrets
renmu123
2020-08-05 10:30:27 +08:00
你前端发一个请求到后端,值分别是 clientid 和 clientkey,然后后端把 token 值再返回就可以了。
BruceXHe
2020-08-05 10:30:56 +08:00
@yaphets666 看得出来
BruceXHe
2020-08-05 10:31:47 +08:00
@renmu123 对,但是别人拿到你前端 的 JS 后,可以找到 clientid 和 clientkey, 这样他就能随意获取 TOKEN 了
des
2020-08-05 10:33:04 +08:00
固定值本来就不安全,你们咋设计的啊?
chendy
2020-08-05 10:33:17 +08:00
clientId,clientKey 一般是服务对服务用的,前后端对接哪来的这一说?
kop1989
2020-08-05 10:34:48 +08:00
clientId 和 clientKey 是写死的?那跟无参数直接申请 token 有什么区别?探讨安全性意义又何在?
BruceXHe
2020-08-05 10:35:20 +08:00
@takemeaway 支付的话,有用户 ID 之类的东西存在,ID 是动态的,和我这里情况好像不太一样,
maichael
2020-08-05 10:38:07 +08:00
写死就等于没有,这样做免登是不行的。
lower
2020-08-05 10:38:16 +08:00
后端提供一个 getToken 接口呀,
BruceXHe
2020-08-05 10:38:28 +08:00
@chendy 现在这不是在讨论设计哇?要保护 API 防止被滥用(加 TOKEN ),但是获取前端 TOKEN 的话,别人肯定也可以模拟获取
BruceXHe
2020-08-05 10:38:58 +08:00
@maichael 有什么好的办法没有?
zzzmh
2020-08-05 10:39:13 +08:00
@yaphets666 不说混淆最终都可以反编译出来,就楼主这个需求,他肯定要请求接口,F12 看 network 就看到传入和返回参数了。
BruceXHe
2020-08-05 10:39:24 +08:00
@lower 想过,不行的。这个 getToken 的办法,别人一样或者调用
zzzmh
2020-08-05 10:39:56 +08:00
@BruceXHe 前后端都 AES 加密,AES 密钥放前端,这招可以治标不治本,治本没办法,根本上换一套设计
libook
2020-08-05 10:39:57 +08:00
前端环境应始终是不受信任的,所以任何敏感信息不要放在前端。

完全不清楚你的 Token 是用来做什么的,为什么不用账号密码反而用 cleintid 和 clientkey,Token 和 clientid/clientkey 到底是什么关系,这些需求背景你得讲清楚,大家详细了解到你想做什么才能帮到你。

如果只是希望在前端存一个东西,且不希望别人知道内容,但同时希望服务端能知道内容,可以用非对称加密,加密后把密文存在前端,服务端解密后读取内容。但这个很可能不适用于你的安全场景,因为获取 Token 不需要知道密文的原文,只需要把密文发给服务端就可以拿到 Token 了。

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

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

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

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

© 2021 V2EX