微信登录令牌 传统网站 用户登录 小程序 令牌 (分 权限) 获取令牌 客户端(携带帐号 密码) --->getToken接口 <-->帐号 密码 Token(令牌) Auth(权限) 访问接口 客户端(接待Token) --->访问接口(如 下单接口) <--> 帐号 密码 Token Auth(核对令牌 有效期 确认权限) 微信身份认证 微信服务器 || openid session_key 客户端(小程序) 携带code码--->getToken(获取openid) --->生成Token 存储记录openid 返回Token <--- 访问接口 客户端(小程序 携带Token)--->校验Token(缓存中获取) --->访问接口(如 下单接口) 1>openid 就是用户身份唯一标识 2>session_key 在小程序里面 可以直接访问微信服务器 拿到加密信息(一个id unionid 也是用户的唯一标识) 区别是 一个用户针对一个小程序openid 不同小程序之间用户关联 一个用户在不同小程序里面openid是不同的 使用session_key解密出来的 unionid 同一个帐号注册的小程序 公众号 unionid都是相同的 3>实际上将 Token和用户信息存储在缓存中 加快访问速度(若是Token存储数据库 频繁访问数据库验证Token 增加数据库压力) openid涉及到用户身份信息等机密信息 不能返回到客户端 ---安全性 openid固定不变 没有失效期 若是丢失安全隐患 所以 生成有有效期的令牌 返回给客户端 通过令牌找到openid 实现: 1>Token 控制器 调用验证层 $code 必填 不为空 'require|isNotEmpty' 2>调用service 层 get方法 返回token CURL发送HTTP请求 返回code ---字符串格式 判断errcode 处理异常 成功返回openid 查询数据库 否则新增记录 返回uid 生成令牌(一组随机字符串 当前时间戳 自定义salt 三组字符串md5加密) 组装缓存数据 将uid 返回errmsg errcode scope(权限)组装成数组 将令牌 缓存数据 令牌过期时间(配置成缓存过期时间) 写入缓存 TP5默认是 文件系统缓存$request = cache($key,$value,$expire_in) ; 可以配置成redis 对象或其他缓存服务 将令牌返回 3>servic层 调用model层 将openid存储数据库 4>application/extra/自定义配置文件 appid appsecret 访问接口 小程序访问微信接口wx.login 返回code 后台服务器获取code 访问微信接口 返回openid secret_key 将自定义tiken_salt token_expire_in配置在配置文件中
ThinkPHP5-Token令牌验证身份以及权限
最新推荐文章于 2023-09-15 10:21:42 发布