HTTP协议有一个叫WWW-Authenticate的头字段,可以用于实现登录验证。它是在RFC 2617中定义的。
当服务器接收到一个request,并在实现下面的代码:
http_response.addHeader('WWW-Authenticate', 'Basic realm...');
http_response.setContentType(MimeTypeConstants.textHtml);
http_response.setCharacterEncoding('UTF-8');
http_response.setStatus( HttpServletResponse.SC_UNAUTHORIZED);
final PrintWriter pw = http_response.getWriter();
pw.write("...");
pw.flush();
http_response.flushBuffer();
浏览器接收的并不是这个请求的response,也就是说这个请求并没有结束,而是接收了一个新的request,表现就是浏览器会直接弹出一个验证窗口,只有我们在这个验证窗口填入正确的验证信息,再去后台请求,返回的才是上一个request的response。
而当我们我们将Basic随便改成自己定义的key
http_response.addHeader('WWW-Authenticate', '随便自定义的key realm...');
http_response.setContentType(MimeTypeConstants.textHtml);
http_response.setCharacterEncoding('UTF-8');
http_response.setStatus( HttpServletResponse.SC_UNAUTHORIZED);
final PrintWriter pw = http_response.getWriter();
pw.write("...");
pw.flush();
http_response.flushBuffer();
浏览器接收到的是一个401错误的response,并不会自动弹出窗口。
而关于弹出的验证窗口的request,则是前面后台包装好的Basic类型,所以这个验证窗口再次发出的请求的内容如下
Authorization: Basic base64编码过的登录信息
所以在后台,我们还得再加上对Base64的反编译。
String auth = http_request.getHeader('Authorization')
String authType = auth.substring(0,auth.indexOf(' '));
if(authType.equalsIgnoreCase('base')){
Base64.decode(auth.substring( auth.indexOf(' ')+1));
}
当然,我们如果想让自己在js中写的前台验证请求也模拟WWW-Authenticate,我们可以再js中做以下模拟:
beforeSend:function(re){
re.setRequestHeader("Authorization", "Basic Base64编码过的登录信息")
}
或
$ajaxSetup({
headers:{
'Authorization' : 'Basic Base64.encode(usdid:psd)';
}
})
则向后台的验证请求与前面弹出窗口的请求就一样了,
然后在后台调用上面写的反编译就可以了。
当然,现在流行http请求而不是https请求,最好不要用Basic而是Digest类型的验证模式。
分享到:
相关推荐
在IT行业中,HTTP协议是互联网上应用最广泛的数据通信协议之一,它定义了客户端和服务器之间交互数据的格式和响应方式。"WWW-Authenticate"是一个关键的HTTP响应头部,它在服务器向客户端发送401(Unauthorized)...
Java Web程序设计涉及的核心概念之一是HTTP协议,它是互联网上应用最为广泛的一种网络协议,用于在Web服务器和浏览器之间传输数据。HTTP协议基于客户端/服务器模型,由客户端发起请求,服务器响应并返回数据。 HTTP...
HTTP协议Header详解是html帮助格式的,方便查询, 通过HTTP协议RFC2616整理的, 目录: 头域定义 2 1 Accept 2 2 Accept-Charset 4 3 Accept-Encoding 5 4 Accept-Language 6 5 Accept-Range 7 6 Age 7 7 Allow 8 8 ...
### 计算机网络-HTTP协议实验报告 #### 第一关:HTTP基本请求与应答 **实验目的:** - 分析HTTP请求与应答中各字段的作用及取值。 - 了解HTTP协议的基本结构。 **实验内容与操作步骤:** 1. **背景知识与所需...
### HTTP协议详解 HTTP(Hypertext Transfer Protocol)是一种用于从Web服务器传输超文本到本地浏览器的应用层协议。本文将从个人学习的角度出发,对HTTP协议进行深入剖析,旨在帮助读者更好地理解其工作原理和机制...
摘要认证是一种在网络交互中增强安全性的方式,特别是在HTTP协议中,用于保护敏感的用户信息,如登录凭证。在ISAPI(Internet Server Application Programming Interface)协议中,摘要认证是确保基于HTTP REST架构...
* Response Header Fields:Accept-Ranges、Age、ETag、Location、Proxy-Authenticate、Retry-After、Server、Vary、WWW-Authenticate * Entity Header Fields:Allow、Content-Encoding、Content-Language、Content...
### HTTP协议头字段及分析 #### 一、概述 HTTP(HyperText Transfer Protocol)作为互联网上应用最为广泛的一种网络协议,主要用于规定客户端与服务器之间如何通信。它是一种基于请求与响应模型的应用层协议,用于...
### HTTP协议头详解 HTTP(Hypertext Transfer Protocol)是一种应用层协议,主要用于从Web服务器传输超文本到本地浏览器等应用程序。HTTP协议头是HTTP请求和响应中的一个重要组成部分,它们携带了关于HTTP消息的...
- **WWW-Authenticate**: 当需要认证时返回此首部字段。 - **Age**: 响应在缓存中的存储时间。 - **Proxy-Authenticate**: 代理服务器要求的认证信息。 - **Public**: 服务器支持的方法列表。 - **Retry-After**: 在...
总的来说,实现Node.js中的HTTP摘要认证需要理解HTTP协议、认证流程以及相关加密算法。通过上述步骤和提供的文件,你可以构建一个基本的HTTP摘要认证服务器,为你的应用程序提供安全的身份验证机制。
- 观察认证过程中涉及的HTTP头部信息,如Authorization和WWW-Authenticate。 6. **跟踪DNS** - **实验过程**: 1. 使用ipconfig命令清空DNS缓存。 2. 使用nslookup工具查询DNS记录。 3. 使用ipconfig命令查看...
在HTTP协议中,鉴权认证过程允许服务器验证客户端(通常是浏览器)的身份,确保只有合法用户能够访问受保护的网页或服务。本篇文章将深入探讨HTTP鉴权认证的概念、机制以及常见的认证类型。 1. **基本概念**: - *...
从这段RFC文档的描述中,我们可以总结出HTTP协议的鉴别机制是Web安全的重要组成部分。正确理解和实现这些机制对于保护敏感数据,防止未授权访问至关重要。随着网络攻击手段的不断更新和升级,相关的鉴别技术也在不断...
401 Unauthorized和407 Proxy Authentication Required是HTTP状态代码,它们在SIP协议中也有类似的应用。在SIP通信中,这些错误通常与身份验证过程有关。401错误意味着服务器要求客户端提供有效的身份验证凭证,而...
- WWW-Authenticate和Authorization头:交互过程中的关键头,用于请求和提供认证信息。 7. **RFC7236:内容协商** - 客户端可以指定其偏好,如语言、编码、媒体类型等,服务器根据这些信息选择最合适的响应。 8....
服务器会返回一个 401 Unauthozied 给客户端,并且在 Response 的 header "WWW-Authenticate" 中添加信息。 如下图。 第二步:浏览器在接受到 401 Unauthozied 后,会弹出登录验证的对话框。用户输入用户名和密码后...
HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,它定义了客户端和服务器之间数据交换的格式和规则。在HTTP通信中,头字段(Header Fields)扮演着至关重要的角色,它们提供了请求和响应的上下文信息,...
服务器会发送一个401未经授权的响应,包含一个WWW-Authenticate头,指明认证的类型。客户端收到后,会在后续的请求中附带Authorization头,包含base64编码的用户名和密码。在Python中,我们可以使用requests库的auth...
在IT领域,网络通信安全是至关重要的,尤其是当我们与...总之,这个Demo涵盖了HTTP协议的高级特性、网络爬虫技术,以及针对特定设备(如海康NVR)的API交互,对于理解和开发这类安全认证的应用具有很高的参考价值。