关于token,你应该知道的十件事

前言:

看到标题,想起了恋爱这件小事,本来想写“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 协议

猜你喜欢

转载自blog.csdn.net/ma15732625261/article/details/82284337