Fecshop的token是通过/account/login接口获取的,这个接口的入参建议加上device_id,然后在生成token的时候,定义一个算法,把device_id做为算法的一部分,生成一个签名。然后之后的需要授权的接口,都把device_id作为其中一个入参传回来,先校验token和device_id是否是匹配的。如果不匹配,定义为恶意尝试,脚本终止。这样可以排除存token的表数据泄露,或者算法泄露,导致的安全隐患。
你说的是appserver入口吧? 最后的部分没有看明白
这样可以排除存token的表数据泄露,或者算法泄露,导致的安全隐患。
详细解释一下,加上肯定是安全性增强,为什么存在安全性问题?
token和session的原理类似,php的session并没有使用客户端的device_id作为参数。
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,是否一致,不一致则拒绝访问
devide_id 和 app_id
使用JWT的好处在于,不需要查询数据库,就可以验证用户的合法性,对于分布式系统非常友好
但是,fecshop的appserver端的token不是使用的JWT,而是生成的,因此,用户每次访问,都需要在redis查询token的合法性,和session类似的原理,因此,不存在你说的问题,不传递devide_id 和 app id,并没有安全问题。