https://www.oldboyedu.com/blog/4538.html

HTTP 认证用户身份的四种方法

一、BASIC认证(基本认证)

二、DIGEST认证(摘要认证)

三、SSL客户端认证

四、FormBase认证(基于表单认证)

web安全认证方式

现如今web服务器随处可见,千万台web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,今天给大家介绍5种常用的web认证方式,请看下文:

1、Http Basic Auth

这种方式就是访问API的时候,带上访问的username和password,由于信息会暴露出去,所以现在也越来越少用了,现在都用更加安全保密的认证方式,可能某些老的平台还在用。

基础认证,属于HTTP协议标准验证。

客户端的请求需包含Authorization请求头(请求头格式:Basic (用户名:密码)Base64编码)。

若客户端是浏览器,则浏览器会提供一个输入用户名和密码的对话框,用户输入用户名和密码后,浏览器会保存用户名和密码,用于构造Authorization值。当关闭浏览器后,用户名和密码将不再保存。

显然这种认证方式并不安全,因为Base64编码的用户名和密码很容易被解码出来,所以这种认证方式一般要配合SSL使用。

假如用户名:admin,密码:123456,经过Basic (admin:123456)Base64编码的到值:Basic YWRtaW46MTIzNDU2,这就是Authorization请求头的值。

  2. Digest:摘要认证

摘要认证,属于HTTP协议标准验证。

Digest是Basic的升级版,因为Basic是明文传输密码信息,而Digest是加密后传输,更加安全。

Digest摘要认证步骤:

客户端访问Http资源服务器。由于需要Digest认证,服务器返回了两个重要字段nonce(随机数)和realm。
客户端构造Authorization请求头,值包含username、realm、nouce、uri和response的字段信息。其中,realm和nouce就是第一步返回的值。nouce只能被服务端使用一次。uri(digest-uri)即Request-URI的值,但考虑到经代理转发后Request-URI的值可能被修改、因此实现会复制一份副本保存在uri内。response也可叫做Request-digest,存放经过MD5运算后的密码字符串,形成响应码。
服务器验证包含Authorization值的请求,若验证通过则可访问资源。
Digest认证可以防止密码泄露和请求重放,但没办法防假冒。所以安全级别较低。

Digest和Basic认证一样,每次都会发送Authorization请求头,也就相当于重新构造此值。所以两者易用性都较差。

      2、OAuth2

OAuth是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源,而无需将用户名和密码提供给第三方。

  3、Cookie-Session Auth

Cookie-Session认证机制就是为一次请求认证在服务端创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象;通过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删除。但可以通过修改cookie 的expire time使cookie在一定时间内有效。

但是这种基于cookie-session的认证使应用本身很难得到扩展,随着不同客户端用户的增加,独立的服务器已无法承载更多的用户,而这时候基于session认证应用的问题就会暴露出来。

表单认证,并不属于HTTP协议标准验证,实现方式多种多样。

最常用的实现方式是cookie+sessiond的配合使用:

浏览器将用户名和密码发送到服务端进行认证服务端认证通过后会将sessionId返回给浏览器浏览器会保存sessionId到浏览器的cookie中下次客户端发送的请求中会包含sessionId值,服务端发现sessionId存在并认证过则会提供资源访问。

4. Bearer:不记名令牌认证

不记名令牌验证(Bearer Token Auth),属于HTTP协议标准验证。它是随着OAuth协议而流行起来的。

Bearer验证的核心是BEARER_TOKEN(或者叫:access_token),它的颁发和验证完全由我们自己的应用程序来控制,而不依赖于系统和Web服务器。

客户端的请求需包含Authorization请求头(请求头格式:Bearer access_token)。

其中比较流行的access_token编码方式是JWT(Json Web Token),JWT特别适用于分布式系统的单点登录(SSO)场景。JWT是一种分布式、无状态认证方式。

       4、Token Auth

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

      5、JWT认证机制(Json Web Token)

JWT作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。

五种常用的web安全认证方式的更多相关文章

  1. PHP5 的五种常用模式

    PHP5 的五种常用模式. 工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系 ...

  2. java线程池和五种常用线程池的策略使用与解析

    java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...

  3. java线程池与五种常用线程池策略使用与解析

    背景:面试中会要求对5中线程池作分析.所以要熟知线程池的运行细节,如CachedThreadPool会引发oom吗? java线程池与五种常用线程池策略使用与解析 可选择的阻塞队列BlockingQu ...

  4. 五种常用的C/C++编译器对64位整型的支持

    变量定义 输出方式 gcc(mingw32) g++(mingw32) gcc(linux i386) g++(linux i386) MicrosoftVisual C++ 6.0 long lon ...

  5. 二、python 中五种常用的数据类型

    一.字符串 单引号定义: str1 = 'hello' 双引号定义: str1 = "hello" 三引号定义:""" 人生苦短, 我用python! ...

  6. 【Android 界面效果28】Android应用中五种常用的menu

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  7. Android中五种常用的menu

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  8. Android UI开发第二十九篇——Android中五种常用的menu(菜单)

    Android Menu在手机的应用中起着导航的作用,作者总结了5种常用的Menu. 1.左右推出的Menu 前段时间比较流行,我最早是在海豚浏览器中看到的,当时耳目一新.最早使用左右推出菜单的,听说 ...

  9. 五种常用web服务器jvm参数设置

     一.tomcat Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大.有以下几种方法可以选用:第一种方法:在配置文件中设置Windows下,在文件/bi ...

  10. CSS 四种样式表 六种规则选择器 五种常用样式属性

    新的html程序要在VS中编写了,在vs中安装ASP.NET和Web开发,并用ASP.NET Web 应用程序(.NETFramework)创建一个网页程序.添加一个html页 后面的代码都是在htm ...

随机推荐

  1. 实战研究:提升Web应用的安全性

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  2. MACD的价值不在于“金叉死叉”而在于背离

    之前我们根据MACD金叉死叉技术指标作为依据对股票进行买入和卖出操作,但由于MACD本身是由均线衍化而来的技术指标,具有一定的滞后性.也正是由于它的滞后性和单一性,通过MACD金叉死叉来进行买卖时,并 ...

  3. ISCC2025破阵夺旗赛三阶段Misc详解 By Alexander

    ISCC2025破阵夺旗赛三阶段Misc详解 By Alexander 写在前面:十八天吃石终于结束了,第一次就让我见到了这个比赛有多么的构式,平台是构式的,睡一觉就1000解了,全是对flag的渴望 ...

  4. linux下使用动态壁纸

    让你的linux桌面动起来(幻梦动态壁纸) 我也是突发奇想,做了这么一个程序,目前在多个linux下可以运行,支持双屏 理论上说支持mpv >=29.0 qt>=5.8.0的系统版本 ub ...

  5. 获取Spring ApplicationContext容器上下文对象实例

    Spring ApplicationContext 容器可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean.如果说BeanFactory是Spring的心 ...

  6. 如何使用MCP开发一个客户端和服务端

    如何使用MCP开发一个客户端和服务端 一.MCP和API以及Function Call核心概念对比 特性 API Function Call MCP (Model Context Protocol) ...

  7. 商品中心—8.商品C端处理高并发的技术文档

    大纲 1.商品C端的高并发架构 2.商品C端的布隆过滤器组件 3.Guava缓存的封装与使用 4.商品C端的接口设计与运行流程总结 5.商品C端系统对商品数据新增和变更时的处理 1.商品C端的高并发架 ...

  8. 深入理解 Taier:MR on Yarn 的实现原理

    我们今天常说的大数据技术,它的理论基础来自于2003年 Google 发表的三篇论文,<The Google File System>.<MapReduce: Simplified ...

  9. hot100之回溯上

    全排列(046) class Solution { List<List<Integer>> res = new ArrayList<>(); public List ...

  10. 独立开发问题记录-margin塌陷

    一.概述 往事如风,一周就过去了. 上周在Figma里指点江山,这周在前端代码里卑微搬砖. 回想上周,在Figma中排列组合,并且精确到1像素.每设计出一个页面,成就感就蹭蹭往上涨. 没想到还没沾沾自 ...