最近想学学前端相关的东西。假如用前后端分离的方式做,即前端调用后端的api获得相关数据,那么有一个问题就是如何保证api的安全性呢,即调用api的代码全部写在前端,既然在前端的话那调用过程等用户全部都能看到对吧(不知道理解的对不对),即调用过程用户全部都能看到。
token 鉴权
@eggggger 这个可以理解为相当于登陆之后才能看对吧?当时对于那些展示页面,比如JD首页,这些数据其实不需要登陆也能看的
@imhered token 鉴权,这样攻击者伪造请求的时候,缺少token参数(足够随机的情况下,伪造token比较困难);但也是防君子不防小人
@DevinXian token 鉴权的话,如果前端调用api的时候,也要传token上来,既然是前端,那任何人都能看到生成token的代码吧?
你需要的是保证api的安全性,token是一种方式,但也不是不存在伪造token(虽然不太可能),最好的方式是直接让“后端”提供的接口不可见。 前端用express搭建,接口通过express进行中转,前端接口可见的都是中间层express提供(这些接口是不重要的),这样就可以解决你的问题
不明白你的意思。“调用过程用户全部都能看到”是啥意思?我怀疑楼主是想保护知识产权,使API的结构不让别人知道,而不是想保护传输的数据本身。是这个意思吗?
@zhanzhenzhen 可能这句话表达的不是很准确。 我的意思是,前端调用api基本上都是ajax等调用的,这些代码在写在前端,用户打开浏览器就能看到了。
@kidbai 通过express中转这个倒是可以避免。 token伪造这个为为什么不大可能呢? 我的理解是token是服务端下发给前端(客户端)的对吧,前端通过ajax(也许可能是别的)调用api,既然是前端的代码,相当于都在客户端,打开浏览器源码就能看见了,或者抓个包什么的。不知道理解的对不对。
楼主,token本来就是不可能防用户自己看见的,用户自己看到自己的数据,有啥关系?用户不可能看到别的用户的数据的。 如果说你要保护的是客户端代码,那又是另一回事了。
楼主要想问的是API安全性的问题,如果不被其它人恶意访问。因为接口都写在客户端里了, 简单的TOKEN肯定是不能满足楼主的要求了。可以升级为动态token,服务端生成,设置过期时间,尽量端一点,token只能访问一次。 生成规则由于是在服务端产生的,客户端没办法掌握,而又只能用一次。这样是不是就解决了楼主的问题?
@bing6 差不多是这个意思
@imhered 我觉得可以参考一下微信公众号里边JS api 的设计。
token鉴权是一方面,如果api本身也有权限区别,建议划分scope
token + (过期刷新功能) + https ,完美解决
https://cnodejs.org/topic/58c1477b06dbd608756d0bca 可以参考我的这篇关于RESTfulApi权限实践