详解BASIC认证

简介:

Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。本文详细讲解BASIC认证的过程及原理。


BASIC认证流程:


在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。



客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中,如当用户名为admin,密码为:123456时,客户端将用户名和密码用“:”合并,并将合并后的字符串用BASE64加密为密文,并于每次请求数据时,将密文附加于请求头(Request Header)中。


HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码。



图解BASIC认证过程:


wKiom1gyliSTL0aLAAKQO3rXLNI345.png






1.  客户端向服务器请求访问受保护的数据,请求的内容可能是一个网页或者是一个其它的MIME类型,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:

Get /index.html HTTP/1.0
Host:
www.favccxx.com


2. 服务器向客户端发送验证请求代码401,服务器返回的数据大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="favccxx.com"
Content-Type: text/html
Content-Length: xxx


3.  当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。

wKioL1gymUfhEyYJAACJQe8mYpA209.png


4.  用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:

Get /index.html HTTP/1.0
Host:www.favccxx.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx

wKiom1gymXeAkZAqAAAx2WP-YZo215.png

注:xxxx....表示加密后的用户名及密码,Authorization = Base64.encode("admin:password");


5.  服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端。



BASIC认证优缺点


优点:

  • 使用非常简单

  • 开发和调试工作简单

  • 没有复杂的页面跳转逻辑和交互过程

  • 更利于发起方控制

缺点:

  • 安全性低,每次都需要传递用户名和密码,用户名和密码很大程度上存在被监听盗取的可能

  • 同时应用本地还需要保存用户名和密码,在应用本身的安全性来说,也存在很大问题

  • 开放平台服务商出于自身安全性的考虑(第三方可以得到该服务商用户的账号密码,对于服务商来说是一种安全隐患),未来也会限制此认证方式(Twitter已停止Basic Auth的支持)

  • 用户如果更改了用户名和密码,还需要重新进行密码校验的过程





本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1875027,如需转载请自行联系原作者
目录
相关文章
|
SQL 监控 druid
Druid未授权访问 漏洞复现
Druid未授权访问 漏洞复现
18187 0
|
缓存 关系型数据库 PostgreSQL
PostgreSQL relcache在长连接应用中的内存霸占"坑"
除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高生成执行计划的效率,还提供了catalog, relation等缓存机制。PostgreSQL 9.5支持的缓存如下 ll src/backend/utils/cache/ attoptcache.c catcache.c
7812 0
|
网络协议 Linux Docker
在Linux中,如何指定dns服务器,来解析某个域名?
在Linux中,如何指定dns服务器,来解析某个域名?
|
JavaScript 开发者
Node.js 的事件驱动机制
Node.js 的事件驱动机制详解
|
11月前
|
存储 SQL 人工智能
Lindorm:AI和具身智能时代的海量多模数据服务
本次分享由阿里云资深技术专家沈春辉介绍Lindorm数据库在AI和具身智能时代的应用。Lindorm定位于提供海量多模数据服务,融合了结构化、半结构化及非结构化数据的处理能力,支持时序、地理位置、文本、向量等多种数据类型。其核心特点包括多模一体化、云原生分布式架构、异步攒批写入、冷热数据分离、深度压缩优化、丰富索引和Serverless计算等,旨在提升研发效率并降低成本。Lindorm已广泛应用于车联网领域,覆盖60%国内头部车企,支撑近百PB数据规模,带来90%业务成本下降。
|
11月前
|
存储 NoSQL MongoDB
Redis在中国火爆,为何MongoDB更受欢迎国外?
本文介绍了Redis和MongoDB的基本概念及其在GitHub Star、DB-Engines Ranking和Google Trends中的数据对比。Redis是一个基于内存的键值对存储数据库,适合快速读写场景;MongoDB则是面向文档的数据库,支持大规模数据存储和复杂查询。全球范围内,MongoDB的搜索热度高于Redis,但在中国市场,Redis更受欢迎,因其高性能和低延迟特性满足了中国互联网公司对高并发的需求。总结部分分析了两者的特点及适用场景,并结合中美两国的行业背景解释了其受欢迎程度的不同原因。
373 1
|
jenkins Java Shell
解决jenkins结束后kill掉衍生进程
解决jenkins结束后kill掉衍生进程
|
安全 关系型数据库 MySQL
MySQL:TABLE_SCHEMA及其应用
MySQL:TABLE_SCHEMA及其应用
369 1
|
Java 数据库连接 数据库
【微服务】mybatis typehandler使用详解
自定义 `TypeHandler` 的能力使得 MyBatis 在处理特定的数据类型转换时更加灵活和强大,为在微服务架构中构建与数据库交互逻辑提供了极大的便利。它允许我们灵活处理多样化的数据格式,满足业务不断变化的需求。
521 2