关于前端 token 安全问题

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

后台:.NET CORE REST API

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

请问大家有什么办法?
9398 次点击
所在节点    Vue.js
88 条回复
BruceXHe
2020-08-05 10:40:11 +08:00
@zzzmh HTTPS 的话,F12 是看不到的,但是你请求的参数写死的话,在 JS 代码里肯定找得到
renmu123
2020-08-05 10:42:19 +08:00
@BruceXHe #8 你们是内部后台管理系统还是面向 c 端或者 b 端的什么系统,这个要看场景
zhoufenfens
2020-08-05 10:43:35 +08:00
请求加签名, 加上时间戳,path,salt 等关键参数,后端看来源 referer
maichael
2020-08-05 10:45:02 +08:00
@BruceXHe 可以拿 fingerprint 之类的信息,然后从后端获取公钥做非对称加密,然后限定指定的 fingerprint 才有权限,密钥对也可以做轮换。
BruceXHe
2020-08-05 10:46:05 +08:00
@libook 好的,抱歉,我再说一下我的场景。

我们有一个商品列表,商品详情接口,VUE 页面展示用,但是这个接口在用户没有登陆的时候是可以看到了的。
当然购买的时候需要登陆,这个是没问题的。

因为这些商品是一些比较敏感的数据(商品是我们的优势,我们不想登陆之后才看得到,但是要也防止被人利用),我们就想着怎么保护这个接口。

背景大概是这样!
你可以理解和 clientid/clientkey/token 没有半毛钱关系
maichael
2020-08-05 10:47:17 +08:00
@BruceXHe 当然,不获取公钥,只获取一个随机因子也可以
maichael
2020-08-05 10:48:39 +08:00
@BruceXHe 那你这个场景是防止 API 被滥用,不是鉴权,你开始方向就错了。
BruceXHe
2020-08-05 10:52:44 +08:00
@maichael 嗯,我们的初衷是,不让任何人可以调用我们的接口,只能通过页面看到信息。现在我们打算不做 WEB 版,只做 APP (内嵌 VUE,密钥存在 APP 里,APP 加固)
KuroNekoFan
2020-08-05 10:53:05 +08:00
jwt 完事
kop1989
2020-08-05 10:53:07 +08:00
@BruceXHe #25 又要让大家都看见,又要防止被坏人看见。这不是无解么?最多只能在反爬上下功夫了。
None123
2020-08-05 10:53:26 +08:00
无解
wjhjd163
2020-08-05 10:55:44 +08:00
@KuroNekoFan 和 jwt 有啥关系,他不需要鉴权
wjhjd163
2020-08-05 10:56:52 +08:00
建议加入 rand,time 等参数通过一系列复杂的计算得出一个计算值,再和后端进行比对。
前端加密部分代码保护好,加上接口限速和云端风控至少破解成本会大大增加
baiyi
2020-08-05 10:59:30 +08:00
需求和现有逻辑冲突,无解。只能提高他们自动化获取的难度,不可能没办法获取
BruceXHe
2020-08-05 11:01:34 +08:00
@baiyi 嗯,日前 是无解了。

我们的初衷是,不让任何人可以调用我们的接口,只能通过页面看到信息。现在我们打算不做 WEB 版,只做 APP (内嵌 VUE,密钥存在 APP 里,APP 加固)
yushiro
2020-08-05 11:03:30 +08:00
限制接口的调用频率,前端页面缓存数据。
被人滥用无非就是高频率的调用,否则你就当 TA 是普通人呗。
dzdh
2020-08-05 11:04:28 +08:00
难道不是 类 OAuth 的用户名密码换取凭据然后凭据+ssl 吗
yeept
2020-08-05 11:05:28 +08:00
如楼上所说,按你描述的需求,只需要网关限制接口的调用频率即可
wjhjd163
2020-08-05 11:05:38 +08:00
@BruceXHe 内嵌 VUE 也可以通过抓包方法获得 Token 的获取过程,如果真准备只做 APP 那就不应该继续采用内嵌 WEB 方案,而是所有接口都做加解密,保证数据即使窃取到也不可读
wangxiaoaer
2020-08-05 11:06:27 +08:00
通过 clientId,clientKey 获得 token 本身就不应该通过前端获取。

一般涉及到 clientId,clientKey 的都是第三方应用接入才这么干,第三方应用服务器直接跟你们服务器交互,通过 id 和 key 获取 token 。

你们自己的内部的应用用这种方式怕不是闲的蛋疼,难道每一个新的浏览器就开一个新的 clientid ?必然不是啊,那问题就来了,所有用户都用同样的 id 和 key,那还有什么意义呢?

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

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

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

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

© 2021 V2EX