常见的鉴权方式,你真的不想知道吗

2021-07-07

https://www.jianshu.com/p/4a00c0c3bf1d

主要内容

  1. 鉴权的作用
  2. 几种常见的鉴权
  3. 各个鉴权的适用场景

一、什么是鉴权

鉴权是指验证用户是否有权利访问系统的行为。

二、目前常见的鉴权方式

常见的鉴权方式有以下4种方式:

  1. HTTP Basic Authentication
  2. token
  3. session + cookie
  4. OAuth

2.1 HTTP Basic Authentication鉴权方式

这是HTTP协议实现的基本认证方式,我们在浏览网页时,从浏览器正上方弹出的对话框要求我们输入账号密码,正是使用了这种认证方式。

2.1.1 HTTP Basic Authentication鉴权方式的流程
 
http基本鉴权方式
2.1.2 HTTP Basic Authentication鉴权方式的注销

认证成功后,客户端每次发送请求都会带上Authorization头部参数,除了使session过期外,客户端如何主动注销登录呢?下面是一种解决方案:
首先需要服务端专门设置一个专门用于注销的账号,客户端主动去修改请求头Authorization信息,当服务端读取到是这个专用于注销的账户,就执行注销流程。

2.1.3 HTTP Basic Authentication鉴权方式的适用范围

这种认证方式存在缺陷,首先它把加密后的账密直接放在请求头,加上base64加密的方式是可逆的,这样账密就容易泄露。所有这种认证方式一般用于对安全要求性不高的系统上。

2.2 token鉴权方式

2.2.1 token鉴权方式流程
  1. 客户端使用账密登录
  2. 服务端验证账密
  3. 账密验证通过,服务端生成一个token,再把token发送给客户端
  4. 客户端通过cookie或者其他方式将token存储起来
  5. 客户端以后发送请求都需要带上token
  6. 服务端验证token的合法性,校验通过则返回资源,不通过则返回401状态码
2.2.2 token鉴权方式适用场景

token验证比较灵活,适用于大部分场景。
常用的token鉴权方式的解决方案是JWT,JWT是通过对带有相关用户信息的json进行加密,加密的方式比较灵活,可以根据需求具体设计,这里就不做过多介绍。

2.3 session + cookie鉴权方式

请看--》java web cookie和session

2.3.1 session + cookie鉴权方式的问题

session一般是存在内存里的,随着用户的增多,服务器的开销也明显变大了。

以上问题可以通过适当增加服务器来满足需求,但这样session的认证方式就会出现问题,比如已登录的用户session存在服务器A上,可是由于负载均衡,下次请求到了另一台服务器B上,服务器B没有保存session,则又要求用户再次登录,这明显是不合理的。

Tomcat服务器提供了集群之间session共享的解决方案,不同服务器之间通过复制更新session的方式来共享session,但如果集群的数量很多,检查和复制的行为会占去一定资源,因此这种方式在服务器比较多的情况下是不理想的。

如果通过哈希的方式某个用户请求路由到某一台服务器上,那么这个用户只需在这台服务器上保存session,可以解决上述问题,但同时这也限制了集群负载均衡的能力,可能会出现某一时刻,大量的请求到达某一台服务器,但是其他服务器又相对空闲的情况。

最后一点,由于sessionid是基于cookie存储的方式保存,如果cookie被截获,用户就容易受到跨站请求伪造的攻击,这是不安全的。

2.4 OAuth鉴权方式

请看--》身份认证系统OAuth2的四种模式



作者:n油炸小朋友
链接:https://www.jianshu.com/p/4a00c0c3bf1d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2021-07-07 19:11  秦时明月0515  阅读(857)  评论(0编辑  收藏  举报