1. token的介绍
token是使用令牌的形式去验证当前用户,而session是通过客户端与服务端的比较来验证当前用户,比如去银行办业务,需要使用自己的身份证,此时身份证就是session,而银行要验证你的信息,就需要查看银行内部保存的身份证信息是否和你持有的一致,若一致才证明你的权限;而用token的形式则只需要使用自己的身份证即可,不必与银行内部保存的身份证信息去比对,从而使得验证更加简单。
2. 几个认证机制的分析
2.1 HTTP Basic Auth
HTTP基本认证适应范围广,基本的网页浏览器都支持这个认证,不过有一个缺点就是传输的信很容易就泄露出去,虽然用户名及密码以BASE64加密,但是BASE64加密强度很低,在登录时,客户端发送用户名和密码这一过程很容易就被拦截,所以安全性低。
2.2 OAuth
OAuth通过开放授权的方式实现认证功能,当用户登录时,服务器会生成一个令牌(token),此令牌就标识着这个用户,并发送给用户,往后用户发送其他请求时,只需要讲令牌发送到服务端,而不用再次发送用户名和密码来验证身份权限,有时为了安全性,会对token进行一些加密处理,通过salt等方法来加强密码。
下图用熟悉的场景来描述,比如想浏览新闻网页时想评论,而自己又没有注册过该网站的帐号,它就提供了注册方法以及使用google帐号登录的方法,此时选择google帐号登录,所以此时关系如下:
①资源拥有者:我们的google帐号
②验证服务器:google服务器
③资源服务器:新闻网站
所以首先新闻网站会请求我们已登录的google帐号授权,拿到授权许可后再请求google服务器,返回一个令牌,再利用这个令牌实现评论功能。在这个场景中,第三方网站不会拿到我们的密码等信息,就避免了信息泄漏等问题,同时通过令牌满足同样的需求,此时要是第三方网站拿到这个令牌或者这个令牌被人盗取,用这个令牌去登录我的google帐号那不是不安全了吗?其实在google授权后,不会将全部的权利都赋予令牌,可能就将用户名以及部分信息授权这个令牌操作,而当涉及敏感部分,这个令牌的等级就不够了,无法操作,保证了安全性。
2.3 Cookie Auth
cookie认知机制,就是在请求发出到服务端后,服务端会新建一个session对象,同时客户端也会新建一个cookie对象,通过客户端的Cookie与服务端的Session匹配来实现状态管理。