前端鉴权方案

4,973 阅读5分钟

  常见的前端解决方案有好几种:HTTP Basic Authentication、session-cookie、Token 验证、OAuth(开放授权)、JWT等等

一、HTTP Basic Authentication

一、HTTP Basic Authentication概念

  HTTP Basic Authentication授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了允许HTTP服务器对客户端进行用户身份验证的方法。

二、HTTP Basic Authenticatio认证过程

  第一步:客户端向服务器请求数据,请求的内容可能是一个网页或者是一个ajax异步请求,此时,假设客户端尚未被验证;
  第二步:服务器向客户端发送验证请求代码401,然后弹出用户登录界面;
  第三步:用户输入用户信息和密码,浏览器会自动以base64形式进行加密;
  第四步:服务器收到请求之后,将信息解密,将其与数据库中的用户信息进行对比,一直的话返回用户需要的请求内容。
  登录失效的方案:在注销操作的时候,专门在服务器设置一个专门的注销账号,当接收到的Authentication信息为注销用户名密码的时候便注销成功了,而客户端在注销操作的时候,手动的去修改请求头的Authentication,将它设置为服务器默认的注销账号和密码。

二、session-cookie

一、session-cookie概念

  利用服务器端的session(会话)和浏览器端的cookie来实现前后端的认证,由于http请求时是无状态的,需要在服务器端创建一个会话(seesion),将同一个客户端的请求都维护在各自得会会话中,每当请求到达服务器端的时候,先去查一下该客户端有没有在服务器端创建seesion,如果有则已经认证成功了,否则就没有认证。

一、session-cookie认证过程

  第一步:服务器在接受客户端首次访问时在服务器端创建seesion,然后保存seesion到内存当中,然后给这个session生成一个唯一的标识字符串,然后在响应头中种下这个唯一标识字符串。
  第二步:浏览器中收到请求响应的时候会解析响应头,然后将session_id保存在本地cookie中,浏览器在下次http请求时请求头中会带上该域名下的cookie信息
  第三步:服务器在接受客户端请求时会去解析请求头cookie中的session_id,然后根据这个session_id去找服务器端保存的该客户端的session,然后判断该请求是否合法.

三、Token验证

一、Token认证过程

  第一步:客户端使用用户名跟密码请求登录;
  第二步:服务端收到请求,去验证用户名与密码;
  第三步:验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
  第四步:客户端收到Token以后可以把它存储起来,比如放在Cookie 里或者Local Storage里;
  第五步:客户端每次向服务端请求资源的时候需要带着服务端签发的Token;   第六步:服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

二、token验证方案JWT

一、JWT概念
  JWT是Auth0提出的通过对JSON进行加密签名来实现授权验证的方案,就是登陆成功后将相关信息组成json对象,然后对这个对象进行某种方式的加密,返回给客户端,客户端在下次请求时带上这个token,服务端再收到请求时校验token合法性,其实也就是在校验请求的合法性。
二、JWT组成
 Headers: 包括类别(typ)、加密算法(alg);
 Claims :包括需要传递的用户信息;
 Signature: 根据alg算法与私有秘钥进行加密得到的签名字串,这一段是最重要的敏感信息,只能在服务端解密;

四、OAuth(开放授权)

一、OAuth概念

  OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供OAuth认证服务的厂商有支付宝,QQ,微信。

二、OAuth认证过程

  第一步:向用户请求授权,而当我们点击等第三方入口时,第三方授权服务会引导我们进入第三方登陆授权页面;
  第二步:当用户点击授权并登陆后,授权服务器将生成一个用户凭证(code)。这个用户凭证会附加在重定向的地址redirect_uri的后面;
  第三步:用户再去请求时携带用户凭证(code),验证服务器返回一个访问令牌(Access Token);
  第四步:再去拿着令牌请求资源时,就会得到受保护的资源信息。