接口加密(具体客户端接口调用请参考接口调用章节)
接口加密是确保系统安全的核心要素,目前框架使用AES进行参数加密的方式进行参数和报文的加密,具体客户端调用的方式详见app/Commponenets/SDK/AES下,具体的方法在app/Http/Controllers/Api下有,路由为test下的加密、解密方法
以往我们的加密本质上已经ok了,但是此次还是进一步提升一个级别,即默认的公钥和偏移量是放置在客户端的,具体值为
AES_KEY=9ouxQY9ALwFhQaFj AES_IV=FQFBCcQh59HNFr2M
那么当用户未登录时,一些公共的接口都可以使用公钥来加密,例如获取城市信息等,一旦Header设定了Authentication,即有了token,那么我们默认本地就有了私钥,必须使用私钥进行加密,加密后后端也会根据token值获取私钥,再进行解密
具体开启加密的方法为env的启动应用加密
#接口加密,公钥信息
ENABLE_APP_ENCRYPT=false TIMESTAMP_VALID_DURATION_MINUTES=30
请注意,新版的加密更加严格,增加了时间戳校验(报文有效时间15分钟),且每个用户一个秘钥,即用户登录后,为用户生成私钥,并随token一起下发,部分接口如果没有登录前,则通过公共秘钥进行加密处理
在测试环境中,为了方便测试,可以在Header中传入Enable-App-Encrypt为1的头,一旦传入就默认走加密,这样测试环境中也可以进行加密测试了