常见的用户认证鉴权方式如下,可以简单了解下,方便我们和后台沟通。
- Cookie Session
- JWT,Token 认证
- OAuth2 认证
- SSO 单点登录
- 扫码认证
一、Cookie Session
1-1、大致流程
- 1、使用浏览器访问服务端页面;
- 2、服务端收到该客户端第一次请求后,会创建一个 session ,生产一个唯一 sessionId ;
- 3、同时在响应请求中设置 cookie ,属性名为jessionid;
- 4、客户端收到后会保存 jessionid ,再次请求时,会在 header 中设置,服务端可从请求头中获取;
- 5、服务端验证获取的 sessionId 是否存在,即可验证是否是同一用户;
1-2、问题
- 当浏览器禁用 cookie 后,基于 cookie 的 session 将不能正常工作,每次都将创建一个新的 session ,可通过url重写传递 sessionid。
- 当用户量太多的时候,比方微博这种,一个系统保存上亿的 seessionId, 这么多用了系统均衡,也是很容易出现单点失败的可能性,那个负责 session 的机器挂了就全惨了
二、JWT,Token 认证
2-1、Token的认证流程:
- 用户输入用户名和密码,发送给服务器。
- 服务器验证用户名和密码,正确的话就返回一个签名过的Token(Token 可以认为就是个长长的字符串),浏览器客户端拿到这个Token。
- 后续每次请求中,浏览器会把 Token 作为 HTTP Header 发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。 特点: 这种方式的特点就是客户端的Token中自己保留有大量信息,服务器没有存储这些信息。
2-2、 JWT 概念:
JWT是 Json Web Token 缩写。它将用户信息加密到Token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证Token的正确性,只要正确即通过验证。
JWT包含三个部分: Header头部,Payload负载和Signature签名。由三部分生成Token,三部分之间用“.”号做分割
大致流程
- 在头部信息中声明加密算法和常量,然后把Header使用Json转化为字符串
- 在负载中声明用户信息,同时还有一些其他的内容,再次使用Json把在和部分进行转化,转化为字符串
- 使用在Header中声明的加密算法来进行加密,把第一部分字符串和第二部分的字符串结合和每个项目随机生成的Secret字符串进行加密,生成新的字符串,此字符串是独一无二的
- 解密的时候,只要客户端带着JWT来发起请求,服务端就直接使用Secret进行解密,解签证解出第一部分和第二部分,然后比对第二部分的信息和客户端穿过来的信息是否一致。如果一致验证成功,否则验证失败。
2-3、总结
JWT 适合做一次行验证,比方邮箱激活账号,Token 适合做 API 请求认证
我们移动端主要还是用的是 API 请求认证。
三、OAuth2 认证
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
3-1、大致流程
- 先去第三方注册,获取类似 client_id,client_secret, redirect_uri 东东
- 用户在页面点击登录后,后端会拿着上面这三样东西,拼接一个地址,跳转到第三方
- 第三方校验 client_id,client_secret,redirect_uri
- 通过后,第三方回调 redirect_uri,在url后面带上 token
- 拿着 token 和client_secret,去第三方获取 acccessToken,
- 然后系统就可以拿着 acccessToken 去第三方获取用户信息,然后就可以关联了
3-2、好处
我们的系统不需要一个维护用户登录的的数据库表,系统多起来了,就非常方便,大家都去一个地方获取用户信息,后面衍生的 网关的概念,是把用户的权限都管理起来了
四、SSO 单点登录
单点登录 英文全称是 Single Sign On,简称就是 SSO,解释就是说:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,是为了解决 内部系统 一次登录 到处使用,共享 session 的问题
4-1、大致流程
4-2、不同域名下的 SSO
这个时候可以通过 Oauth2 的方式去获取这个 Cookie,存到a的域名下,同样拿着这个 cookie 去 common session 服务器获取用户信息
4-3、解决的点
- SSO 是解决 只需要登录一次,就可以访问其他相互信任的应用系统
- SSO 适合公司内部多系统
五、扫码认证
5-1、大致流程
- 网页端的二维码 本质是一个 url,比方是 https:/xxx?uuid=xxxxx, 这个uuid是生成的当前pc的唯一标示,
- 然后会定时请求后端的API,假设这个请求叫 A 请求,根据返回的状态来做下一步动作
- 当手机扫码后,会带上这个uuid和用户信息,发送一个请求给后端,后端拿到这个 uuid,就知道用户已经登录来,然后上面的 A 接口
- 就会返回一个已经登录的状态,同时返回用户信息,这样 二维码页面会跳转到用户列表页,整个扫码登录流程完成。
以上是常见的用户认证鉴权方式,目前我们移动端常用的是 Token 的认证方式。