关于API调用中的token安全的建议

bug问题 · zks888 · 于 5年前 发布 · 4509 次阅读

Fecshop的token是通过/account/login接口获取的,这个接口的入参建议加上device_id,然后在生成token的时候,定义一个算法,把device_id做为算法的一部分,生成一个签名。然后之后的需要授权的接口,都把device_id作为其中一个入参传回来,先校验token和device_id是否是匹配的。如果不匹配,定义为恶意尝试,脚本终止。这样可以排除存token的表数据泄露,或者算法泄露,导致的安全隐患。

共收到 2 条回复
Fecmall#15年前 0 个赞

你说的是appserver入口吧? 最后的部分没有看明白

这样可以排除存token的表数据泄露,或者算法泄露,导致的安全隐患。

详细解释一下,加上肯定是安全性增强,为什么存在安全性问题?

token和session的原理类似,php的session并没有使用客户端的device_id作为参数。

Fecmall#25年前 0 个赞

devide token : https://www.jianshu.com/p/db9b04335d8b

你说的,应该是基于JWT的token吧?直接通过用户信息和密钥生成的token,如果不加上设备id和appid,那么用户在ios和安卓上面登陆,生成的token都是一样的,如果token泄露,那么任何人都可以使用

而JWT的token生成加入devide_id 和 app_id 后,服务端接收参数后,可以通过秘钥将token解密,然后可以查看token解密的devide_id 和 app_id 和 传递的devide_id 和 app_id,是否一致,不一致则拒绝访问

使用JWT的好处在于,不需要查询数据库,就可以验证用户的合法性,对于分布式系统非常友好

但是,fecshop的appserver端的token不是使用的JWT,而是生成的,因此,用户每次访问,都需要在redis查询token的合法性,和session类似的原理,因此,不存在你说的问题,不传递devide_id 和 app id,并没有安全问题。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics