zoukankan      html  css  js  c++  java
  • 常见的鉴权方式,你真的不想知道吗

    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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    .NET逻辑分层架构总结
    ASP.NET MVC 4 的JS/CSS打包压缩功能-------过滤文件
    c#实现浏览器端大文件分块上传
    fckeditor如何能实现直接粘贴把图片上传到服务器中?
    web编辑器直接粘贴图片实现
    富文本编辑器直接粘贴图片实现
    百度ueditor编辑器直接粘贴图片实现
    百度编辑器直接粘贴图片实现
    fckeditor直接粘贴图片实现
    wangEditor直接粘贴图片实现
  • 原文地址:https://www.cnblogs.com/zhangchao0515/p/14983170.html
Copyright © 2011-2022 走看看