HTTP使用BASIC认证的原理及实现方法
一. BASIC认证概述
在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中, 如当用户名为anjuta,密码为:123456时,客户端将用户名和密码用“:”合并,并将合并后的字符串用BASE64加密为密文,并于每次请求数据时,将密文附加于请求头(Request Header)中。HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用 户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码。
二. BASIC认证的过程
1. 客户端向服务器请求数据,请求的内容可能是一个网页或者是一个其它的MIME类型,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:
Get /index.html HTTP/1.0
Host:www.google.com
2. 服务器向客户端发送验证请求代码401,服务器返回的数据大抵如下:
HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="google.com"
Content-Type: text/html
Content-Length: xxx
3. 当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。
4. 用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:
Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx
注:xxxx....表示加密后的用户名及密码。
5. 服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端:三. BASIC认证的缺点
HTTP基本认证的目标是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中,如大家所用路由器的配置页面的认证,几乎 都采取了这种方式。其缺点是没有灵活可靠的认证策略,如无法提供域(domain或realm)认证功能,另外,BASE64的加密强度非常低,可以说仅 能防止sohu的搜索把它搜到了。当然,HTTP基本认证系统也可以与SSL或者Kerberos结合,实现安全性能较高(相对)的认证系统
三.BASIC认证的JAVA实现代码
HttpSession session = request.getSession();
String user = (String)session.getAttribute("user");
String pass;if(user == null){try{response.setCharacterEncoding("GBK");PrintWriter ut = response.getWriter();String authorization = request.getHeader("authorization");if(authorization == null||authorization.equals("")){response.setStatus(401);response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");out.print("对不起你没有权限!!");return;}String userAndPass = new String(new BASE64Decoder().decodeBuffer(authorization.split(" ")[1]));if(userAndPass.split(":").length < 2){response.setStatus(401);response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");out.print("对不起你没有权限!!");return;}user = userAndPass.split(":")[0];pass = userAndPass.split(":")[1];if(user.equals("111")&&pass.equals("111")){session.setAttribute("user",user);RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");dispatcher.forward(request,response);}else{response.setStatus(401);response.setHeader("WWW-authenticate","Basic realm=\"请输入管理员密码\"");out.print("对不起你没有权限!!");return;}}catch(Exception ex){ex.printStackTrace();}
}else{RequestDispatcher dispatcher=request.getRequestDispatcher("index.jsp");dispatcher.forward(request,response);
}
HTTP使用BASIC认证的原理及实现方法相关推荐
- Apache 配置 Basic 认证
/** 环境:WAMP( Windows7 + WampServer2.2(Apache 2.2.21)) */ 配置过程: ① 生成用户文件,文件路径可以使用绝对路径,也可以使用相对路径 进入 ap ...
- [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证
很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前请求者是一个经过授权的用户.授权的本质就是让用户在他许可的权限范围内做他能够做的事情,授权的前提是请求者 ...
- java basic认证_Basic认证
Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用. 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP ...
- springboot-springSecurity 之 http Basic认证 (四)
引言: HTTP基础认证(BA)是一种简单的认证机制.当一个web客户端需要保护任何web资源的时候,服务器会发送一个带有401状态码(未授权)的HTTP回应,还有类似WWW-Authenticate ...
- (chap8 确认访问用户身份的认证) BASIC认证(基本认证)
1. BASIC认证是Web服务器与同喜客户端之间进行的认证方式. 2. 步骤 step1. 当请求的资源需要BASIC认证时,服务器会随状态码401Authorization Required,返回 ...
- Basic认证方式访问url
同学们,今天我们来了解一下Basic认证.Basic认证在访问WebApi时需要验证账号密码,它是最基础的验证之一.通常我们裸奔一个服务的url,如果被别有用心的人拿到了,那么他就能无限调用接口操作数 ...
- asp.net core 使用identityServer4的密码模式来进行身份认证(2) 认证授权原理
前言:本文将会结合asp.net core 认证源码来分析起认证的原理与流程.asp.net core版本2.2 对于大部分使用asp.net core开发的人来说. 下面这几行代码应该很熟悉了. s ...
- Node --- Basic认证
Basic认证: 当客户端与服务器端进行请求时,允许通过用户名和密码实现的一种身份认证方式. // 如果一个页面需要Basic认证,它会检查请求报文头中的Authorization字段的内容,该字段的 ...
- java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...
某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见.为达到这个目标,必不可少的就是认证功能. 一.认证 核对登录者本人才知道的信息: 密码.动态令牌.数字证书.生物认证.IC卡等 HTTP 使用 ...
最新文章
- [ARC062F]Painting Graphs with AtCoDeer
- 身为初学Java的你,这些IDE的优缺点你都知道吗?
- 数学 希腊字母 Greek Alphabet
- 算法——常用的数据结构/模板/基础知识
- 前端学习(3219):...扩展
- 我们在使用计算机时,不能做什么?,11秋季学期计算机应用技术基础学习周期_01任务-在线作业[1]1...
- 2021年中国自有品牌行业发展白皮书
- group by配合“聚合函数”才有意义
- 硬盘安装Windows7--笔记
- golang mysql封装_使用Golang 封装一个Api 框架 ----- 数据库操作篇(gorm引入)
- leetcode 1170 python
- 以下关于c语言中static和const,c语言中static const作用
- 如何使用FTP软件进行文件传输( 本地文件传到服务器)
- 大海捞针 - Everthing的实现思路
- Win10下NTFS分区变RAW修复的一种错误方法
- vmix一块屏幕分成三块_定点爆破三块绊脚石,OLED电视或可星火燎原
- 互联网入口之战:浏览器战争
- python网易云听歌时长_用Python爬取10w条网易云音乐热评并进行分析的方法总结
- 编译原理——编译程序的组成
- python中cv是什么_python里面cv是什么意思