在app应用研发应用或调取Oauth2.0服务、和一些其他api服务常常都有token机制。

为什么要有token机制?

1、区分权限

例如:有些接口可以访问一些公用的信息,这里假设app访问的接口是获取banner轮播图。但有写接口是获取个人资料的情况就需要认证。

2、通用性强

token的传递方式也不限于cookie传递。用户登录成功后返回token(浏览器中可以禁用cookie)。像微信的Oauth的token机制。

用非浏览器手段访问例如php_curl扩展访问、无法自动保存cookie(就是说非浏览器手段无法直接的保存会话状态)、除非解析http返回头

//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 1);

设置curl返回请求头。

图

在php代码中加入

curl_setopt($curl, CURLOPT_COOKIE, $cookie);

图

说明是cookie在api的请求中有一定的局限性。而cookie需要在请求头上协带。还有一点就是不cookie是无法跨网站的。例如www.solo365.com和blog.solo90.com。生成一个cookie不通用。但在blog.solo90.com和blog.solo90.com中一级域名都是solo90.com二级域名不一样,这种情况下通过配置作用域的不同,可以实现跨域。

而token的发送和接收都可以放在请求当参数进行交互


多端平台可以通用一个token,例如:火狐。谷歌。IE。android。ipad等

正常的session是以文件存储的,假如多端使用那么,就多个session文件。浪费性能。

但毕竟还是不够灵活多变。扩展性token更强一些

在普通情况下、token和session几乎差不多。性质是一样的,识别用的身份和权限

例如:对方的api是tcp服务器(swoole_server)。session也没有用

token的获取

token

token需要验证的几点

  • 验证是否合法(数据库有没有此用户)
  • 验证是否有效(token的失效请、合理的时间)
  • 验证对应的权限(对应的权限分组)

token的生成的方式

token的生成可以是一个无意义的加密字符串、各种算法都可以。但是要求唯一性。

微信开发中的token设计

图

token一般用缓存来做,提升访问速度。每次请求的需要认证,一般用redis。

openid放在服务器里安全系数更高。

token的过期时间服务器可控。

openid在一个小程序或公众号里面openid是不变的、没有失效时间。所以不能放在客户端安全隐患更高。

关于多平台的token设计文章

https://cloud.tencent.com/developer/article/1351749

Last modification:January 31, 2020
如果觉得我的文章对你有用,请随意赞赏