常用身份验证机制

http basic Auth

  • 这是最简单的验证方式,每次请求直接提供用户名和密码。安全性比较低。

OAuth(开放授权)

  • 允许第三方应用访问该用户在某一web服务上存储私密资源,无需提供密码。
  • OAuth允许用户提供一个令牌,作为授权许可,每个令牌授权一个第三方的应用在特定的时段内可以访问特定的资源,这样可以让用户可以授权第三方应用哪访问用户存储在其他服务中的一些信息。

cookie机制

session

  • web应用中经常使用session来记录客户的状态,session是服务器端记录客户端的状态机制,保存于服务器
  • 虽然session是保存于服务器,但是他需要Cookie作为识别标志,http是无状态的协议,session无法根据其连接判断是否是同一个用户,因此会发送一个作为JSEESIONID的cookie,其值相当于该用户session的“key”映射。

cookie产生使用流程

  • 当用户访问第一次可以使用cookie的网站的时候,用户提供个人信息(用户名,密码)给服务器,然后服务器向客户端回传资源的时候,也回发这些个人信息(置于相应头qesponse-header),当客户端浏览器收到来自服务器响应之后,浏览器将这些信息存储于本地—>即cookie;之后,每次客户端发送请求的时候,都会把响应的cookie再次发送至服务端(置于请求头request-header),这个时候服务端接受发哦cookie进行解析可以响应相应内容。

cookie具有不可跨域名性质

  • 我们会访问多个网站那么当我们同时用多个网站的时候,会不会错发A网站的cookie给B网站呢?
  • 结果是不会,由于cookie具有不可跨域名的性质,并且在客户端是有浏览器管理的,浏览器可以保证。

url地址重写

  • 当客户端不支持cookie的时候,URL地址重写就是讲session 的JSESSIONID放在URL中,是服务器解析URL获取ID。

Token Auth

  • 简单来讲就是客户端输入账号密码想后端发送登录的请求,服务端通过验证之后,给客户端返回任意字符串==》即token,token必须与用户的账户进行关联,userid与token必须形成键值对,客户端拿到token之后,在之后的需要验证登录的请求中待会带着token(一般用于hidden域),然后服务端根据收到的token对其登录的状态进行验证。
  • 一般来说token在每次登录重新生成,每次操作之后更新token的时间戳,保证token的有效期延期。
  • 为了避免token被截获,伪造非法请求,可以在请求的时候,可以用userid+token+时间戳+密钥+请求参数进行签名,后端验证token和签名可以保证安全。

对比cookie与token

  1. token支持跨域访问:cookie不允许跨域访问,token却是可以的。
  2. 无状态(又称为服务端可扩展性):token机制在服务端不需要存储session信息,因为token本身自带了所有登录用户的信息,只需要客户端的cookie或者本地截止存储状态信息。
  3. 更加适用于移动应用:当起客户端是一个原生平台(ios,windows),这个是不支持cookie的,需要附加cookie容器进行处理,但是适用token就会更加方便。
  4. 性能: 比使用查询session信息更加快捷
  5. 不用为登录页面进行特殊处理
  6. 基于标准化:可以采用标准的JSON WEB Token(JWT)。
  7. JWT生成如下所示image