前言:
看到标题,想起了恋爱这件小事,本来想写“token,这件小事”的,但是尊重原作
转自:http://ju.outofmemory.cn/entry/134189 关于 Token,你应该知道的十件事
正文:
1、token应该被保存起来:放到local/session stograge或cookies
单页应用程序中,有些用户刷新浏览器后会带来token相关的问题,解决方法如标题1,浏览器不支持session storage时转存到cookies,将cookies作为存储机制,不会被web用于用户验证,无XSRF危险
2、token可以有更多的操作方法
token应该有一个有效期,不能无期限吧,什么都是有个时限的,要不然怎么挣钱?开玩笑,cookies也是
cookies可在浏览器关闭后删除session cookies
服务器端检查,或绝对/相对有效期;
cookies可带有有效期地保存起来(浏览器关闭也不删除)
token使用中,过期重获取,使用接口刷新
旧token过期; 检查用户是否还存在(怎么瘆得慌)权限是否被取消;得到新token
3、local/session storage不会跨域工作,使用一个标记cookie
如果设置了cookie域名为.yourdomain.com,其可被yourdomain.com和app.yourdomain.com获取,用户登录转到app.yourdomain.com后可从主域名找回这个cookie
存在local/session storage的tokens,不能从不同域名(含子域名)中读取,怎么做?
可以:当用户通过app.yourdomain.com上验证时生成token且作为cookie保存到.yourdomain.com,在yourdomain.com中可检查这个cookie是不是已经存在,存在就转到app.yourdomain.com,此后token对程序子域名及之后流程都有效(直至过期)
但将导致cookie存在如果token被删除或其他意外,用户将不得不重新登录;像前所说:我们不会用这个cookie做为验证方法,只是作为存储机制支持存储信息再不同域名中
4、每个cors请求都会带上预请求preflight request
当content-type:application/json时,authorization header对特定urls的all请求都会带上一个预请求
the options请求不会带authorization header自身,网络架构应支持区别对待option和后来的请求
5、当你需要流传某些东西,请用token去获取一个已经签名的请求
token使用中,请求通过xhr(XMLHttpRequest 好文 遗憾现在才读到)完成,不能依赖他,解决方法:想AWS那样通过生成签了名的请求
6、XSS比XSRF更容易防范
XSS跨站脚本攻击:在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中【百科】
原理:攻击者插入一段读用户浏览器cookies并将其传给攻击者的可执行JavaScript脚本,攻击者得到cookies后 可冒充用户
防范:写入cookies时,将httpOnly设置为true,客户端JavaScript无法读取cookies值
token也是存在本地session storage 或客户端cookies中,也会受xss攻击,用tokens考虑过期机制
XSRF危害较大:almost web框架内置xss防范机制,但xsrf不是,开发者要留言xsrf
7、注意token大小
token每次请求会带上authorization的http header,token大小又存在token的信息量(可能有额外信息)决定,但是session cookies只需一个字串作为用户标识即可,关于用户的信息直存到服务端的数据库,当用户请求时从库中取出
token也可以仿照session cookies:token只保留关键标识信息,其余放到库中,用时取出
也可以加密后都丢到cookie里
8、有需要的话,要加密签名token
虽TLS/SSL可隔绝大多数中间人攻击,如果token带有了用户敏感信息,要加密
使用jwt 加密token,也可使用AES-CBC算法加密,也可以像7所写,将敏感信息丢到数据库中
jwt使用HMAC算法或者是RSA的公私秘钥对进行签名:定义了一种简洁(可以通过URL,POST参数或者在HTTP header发送,数据量小,速度快)的,自包含(负载中包含了所有用户所需要的信息,避免了多次查询数据库)的方法用于通信双方之间以Json对象的形式安全的传递信息;
无状态的认证机制,服务端保护路由检查(客户端)请求头Authorization中JWT信息,合法,则允许用户行为
9、将json web token应用到OAuth2.0
解决身份验证的授权协议https://www.cnblogs.com/flashsun/p/7424071.html
oauth2支持jwt,不限制access_token格式
10、tokens不是万能的,据需求自行采用
不要什么内容都写到token,想想有木有必要辣
https://blog.csdn.net/PTkin/article/details/50563831 [搬运]扫盲 HTTPS 和 SSL/TLS 协议