简单签名
前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。
模拟前台生成接口签名链接
thinkphp5 模拟
1 |
|
具体需要前台按照统一算法约定生成 sign
后台处理
后台得到参数加密生成 sign 比对
1 |
|
使用 openssl 对称加密算法加密接口
可用的对称加密算法(des/aes/3des): 使用命令行 openssl –help
1 | # 查看对称加密算法类型 |
以DES对称加密 des-cbc/pksc5填充为例结果base64编码
1 | class CryptDes |
RSA非对称加密
我一般服务器留私钥,给别人公钥,看个人吧,都可以.
命令行生成一对秘钥;php openssl_pkey_new() 也能生成一个新的私钥和公钥对
1 | # 生成私钥 // 默认长度 2048 |
1 | class RSA |
JWT 用户认证
介绍: http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html
实现多点登录认证
安装扩展包
composer require firebase/php-jwt
基础示例
1 |
|
刷新
客户端通过用户名密码登录以后,服务端返回给客户端两个token:access_token和refresh_token
举个例子:比如access_token设置2个小时过期,refresh_token设置7天过期,2小时候后,access_token过期,但是refresh_token还在7天以内,那么客户端通过refresh_token来服务端刷新,服务端重新生成一个access_token;如果refresh_token也超过了7天,那么客户端需要重新登录获取access_token和refresh_token。
为了区分两个token,我们在载荷(payload)加一个字段 scopes :作用域。
1 |
|
ps:token 可以添加到 header头,也可以 post body 体里面