鉴权

鉴权是指检验用户是否拥有访问某一个系统的权限,传统的方式是通过密码进行验证,但是方法比较繁琐,现在一般不用.

鉴权分类

鉴权现在一般分为两类,一类是网络对用户的鉴定,防止非法用户占用资源,第二类是用户对网络进行鉴定,防止接入非法网络,被盗取信息。这种双向认证机制被称为AKA

1.HTTP Basic Authentication

这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定 义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。认证过程:1.客户端向服务器请求数据,请求的内容可能是个网页或者是个ajax异步请求,此时,假设客户端尚未被验证,则客户端发送如下请求
Get /index.html HTTP/1.0
Host:www.google.com
2.服务 器向客户端发送验证请求代码401,(WWW-Authenticate: Basic realm=" google.com” 这句话是关键,如果没有客户端不会
弹出用户名和密码输入界面)服务器返回的数据大抵如下: .
HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm=" google.com"
Content-Type: text/html
Content-L ength: xXx
3. 当符合http1.0或1.1规范的客户端(如IE, FIREFOX) 收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。
4. 用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一 条请求信
息则变成如下内容:
V下一篇
Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic d2FuZzp3YW5n
注: d2FuZzp3YW5n表示加密后的用户名及密码(用户名:密码然后通过base64加密,加密过程是浏览器默认的行为,不需要我们人为
加密,我们只需要输入用户名密码即可)
5.服务 器收到.上述请求信息后,将Authorization字 段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,
如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端。
效果:
客户端未未认证的时候,会弹出用户名密码输入框,这个时候请求时属于pending状态,这个时候其实服务当用户输入用户名密码的时候客
户端会再次发送带Authentication头的请求。

2.session-cookie机制

4.2 session-cookie
HTTP Cookie (也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的- -小块数据,它会在浏览器下次向同-服务器再发起请求时被携带并发送到服务器.上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态,Cookie基于无状态的HTTP协议记录稳定的状态信息成为了可能。.
Cookie主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、 主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
认证过程
1.服务器在接受客户端首次访问时在服务器端创建seesion,然后保存seesion(我们可以将seesion保存在内存中,也可以保存在redis中,推荐使用后者),然后给这个session生成个唯一的标识字符串session id,然后在响应头中种下这个唯一标识字符串。
2.签名。这一步只是对session id进行加密处理,服务端会根据这个secret密钥进行解密。(非必需步骤)
3.浏览器中收到请求响应的时候会解析响应头,然后将session id保存在本地cookie中,浏览器在下次http请求请求头中会带上该域名下的cookie信息。(cookie中包含着session id)
4.服务器在接受客户端请求时会去解析请求头cookie中的session id,然后根据这个id去找服务器端保存的该客户端的session,然后判断该请求是否合法。并读取session中记录的状态.
5.一旦用户登出,服务端和客户端同时销毁该会话在后续请求中,服务器会根据数据库验证会话id,如果验证通过,则继续处理;

3.Token验证

Token是一种随机数,在一短时间内动态的改变,在防御csrf中起到了重要的作用,Token的验证机制如下
4.3 Token验证认证过程
1.用户输入登陆凭据;
2.服务器验证凭据是否正确,然后返回一个经过签名的token;
3.客户端负责存储token,可以存在localstorage,或者cookie中
4.对服务器的请求带上这个token;
5.服务器对JWT进行解码,如果token有效, 则处理该请求;
6.一旦用户登出,客户端销毁token。

4.OAuth(开放授权)

4.4 OAuth(开放授权)
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。我们常见的提供OAuth认证服务的厂商有支付宝,QQ, 微信。OAuth协议又有1.0和2.0两个版本。相比较1.0版,2.0版整 个授权验证流程更简单更安全,也是目前最主要的用户身份验证和授权方式。
典型案例
果一个用户拥有两项服务: - -项服务是图片在线存储服务A,另一个是图片在线打印服务B。由于服务A与服务B是由两家不同的服务提供商
提供的,所以用户在这两家服务提供商的网站上各自注册了用户,假设这两个用户名各不相同,密码也各不相同。当用户要使用服务B打印存储在服务A.上的图片时,用户该如何处理?
方法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下:
方法二:用户将在服务A.上注册的用户名与密码提供给服务B,服务B使用用户的帐号再去服务A处下载待打印的图片,这种方式效率是提高了,但是安全性大大降低了,服务B可以使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。
方法三:当服务B (打印服务)要访问用户的服务A (图片服务)时,通过OAUTH机制,服务B向服务A请求未经用户授权的RequestToken后,用户在服务A的网站上登录,并询问用户是否将图片服务授权给服务B。用户同意后,服务B就可以访问用户在服务A.上的图片服务。整个过程服务B没有触及到用户在服务A的帐号信息。