前(后)端鉴权方式

Posted by Mars . Modified at

前端鉴权:掘金

一、cookie + session

cookie+session

  • 浏览器登录发送账号密码,服务端查用户库,校验用户;
  • 服务端把用户登录状态存为 session,生成一个 session_ID;
  • 通过登录接口返回,把 sessionID set 到 cookie 上;
  • 此后浏览器再请求业务接口,session_ID 随 cookie 带上;
  • 服务端查 session_ID 校验 session;
  • 成功后正常做业务处理,返回结果。

优点:

  • 因为主要信息在服务器存储,客户端只需要存储一个用来标识唯一性的ID,减少了请求携带cookie的体积;

缺点:

  • 服务端需要对每个session进行储存,压力大;
  • 服务端如果是集群,需要把session用额外独立的库集中储存。

二、token

token

  • 用户登录,服务端校验账号密码,获得用户信息;
  • 用户信息、配置等编码成 token,通过 cookie set 到浏览器;
  • 此后用户请求业务接口,通过 cookie 携带 token;
  • 接口校验 token 有效性,进行正常业务接口处理。

token与session的区别?

  1. token携带了用户的完整信息,通过服务端密钥编码储存在客户端,服务端不进行储存;而session则主要由服务端保存会话数据;

  2. 狭义上,session指代“服务端保存会话信息,客户端用cookie储存会话id”的鉴权形式,而token更为灵活,指代“客户端可以存在任何位置,服务器不保存信息”的鉴权形式;

优点:

  • 服务端不保存用户会话信息,避免查库带来的延迟;
  • 服务端压力小,不需要设置session统一管理架构,降低成本。

缺点:

  • token一般较长,请求携带cookie体积较大;

三、JWT:JSON Web Token

什么是JWT

JWT是Token的一种实现。它和普通Token都是访问资源的令牌。它们的区别是:

普通Token在被服务器收到后,服务器可能需要去查询数据库才能确认用户的身份,而JWT本身就包含加密信息,服务器利用自己的密钥对JWT进行验证,就可以确定用户身份,不需要查询数据库。

校验JWT的网站:JWT校验

JWT

JWT组成

Header和Payload

JWT由三部分组成:Header、PayloadSignature

其中Header中的字段比较固定:

  • **typ: ** 类型。值恒定为'JWT'
  • **alg: ** 签名的加密算法。一般选为'HS256'

Payload的字段可以自由设置。

Header和Payload的原始数据都是JSON格式,通过Base64编码后,放入JWT的前两个部分。

Signature 签名

签名由两部分计算而成:

  • A: Header和Payload的Base64编码串,中间用','串联;
  • B: 安全码Secret-Code。可以自由指定,用于对JWT的有效性进行校验。(长度不超过256bit)

加密方式一般选择HS256,即加密后的字符串为HS256(A, B)。它将放在JWT的第三部分。

JWT的校验

服务端收到用户的JWT后:通过指定的安全码Secret-Code,对JWT的前两部分进行一次HS256计算即可,结果与第三部分进行比对,如果一致可通过校验。

四、单点登录

1. 什么是单点登录?

假设一个公司拥有多个业务,部署在多个域名下,只要用户在一个业务下完成登录,访问其他业务页面可自动登录,叫做单点登录

2. 如何实现?

同一域名下的不同子域名,可以使用cookie的domain关键字来实现。

不同域名下,单点登录需要使用独立的认证服务SSO来实现。

单点登录

Keywords: Safety
previousPost nextPost
已经有 1000000 个小伙伴看完了这篇推文。