摘要:用户输入用户名和密码后,用户名和密码会经过加密附加到请求信息中再次请求服务器,服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。给出的认证提示。认证窗口关闭之前,浏览器状态一直是等待用户输入。
Basic 概述
Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。
当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器,HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。
使用Tomcat进行Basic认证如果熟悉Tomcat的朋友,肯定知道Tomcat自带的有个manager项目,访问这个项目需要Basic认证。
下面我们来给我们自己的项目加Basic认证。
配置项目的 web.xml示例:
lvyou home com.coder4j.web.servlet.HomeServlet home /home.do GuiLin /* lvyou BASIC guilin photos index.html index.jsp
对上面加注释的部分进行简单的解释:
web-resource-name : 给这个认证起个名字
url-pattern : 哪些地址需要认证,/*表示此项目的任意地址都需要认证,/lvyou/*表示/lvyou下的任意地址都需要认证。
role-name : 哪些角色的用户认证后可以访问此资源(光认证还不够哟,必须得是许可的角色哟),我这里规定必须是lvyou这个角色的用户才能看我的照片。
auth-method : 认证方式为BASIC认证。
realm-name : 给出的认证提示。
修改 tomcat-users.xmltomcat 提供了用户配置文件,我们直接使用就行了。
至此,两步就完成了Basic 认证,如果想访问我的照片,就需要输入tom 和 tomcat才行哟。
当然配置方式不止这一种,网上一搜很多的,有机会再整理一部分,这里仅仅想介绍Basic认证。
Basic 认证的过程由上面的实战可以得知,Basic认证的流程很简单,现概述如下:
1, 客户端向服务器请求数据,并且请求的数据是需要认证才能看的,并且客户端目前没有认证过。
2, 访问的页面需要认证,客户端弹出认证窗口。
认证窗口关闭之前,浏览器状态一直是:pending等待用户输入。
点击 x 或取消,将会出现401状态码,响应内容如下:
响应头中有一句话:
WWW-Authorization: Basic realm="guilin photos"
表示需要认证,提示信息为:guilin photos
3, 刷新页面,输入正确的用户名和密码,将会进入到我们的项目中
输入用户名和密码的请求信息头如下:
这是我们的认证信息。加密策略如下:
用户名和密码用:合并,将合并后的字符串使用BASE64加密为密文,每次请求时,将密文附于请求头中,服务器接收此密文,进行解析,判断是否认证
Java 实现我们知道了流程,当然可以用代码来实现。
核心代码:
HttpSession session = request.getSession(); String user = (String) session.getAttribute("user"); String pass; if (user == null) { try { response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); String authorization = request.getHeader("Authorization"); if (authorization == null || authorization.equals("")) { response.setStatus(401); response.setHeader("WWW-Authenticate", "Basic realm="input username and password""); out.print("401 认证失败"); 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="input username and password""); out.print("401 认证失败"); return; } user = userAndPass.split(":")[0]; pass = userAndPass.split(":")[1]; if (user.equals("111") && pass.equals("111")) { session.setAttribute("user", user); // 跳转合适的地方 } else { response.setStatus(401); response.setHeader("WWW-Authenticate", "Basic realm="input username and password""); out.print("401 认证失败"); return; } } catch (Exception ex) { ex.printStackTrace(); } } else { // 跳转合适的地方 }
Basic认证的核心就是响应401状态码,告知浏览器需要用户输入用户名和密码,然后就是后台按照Basic加密的方式进行解密验证即可。
缺点HTTP基本认证的目标是提供简单的用户验证功能,其认证过程简单明了,适合于对安全性要求不高的系统或设备中,如大家所用路由器的配置页面的认证,几乎都采取了这种方式。其缺点是没有灵活可靠的认证策略,另外,BASE64的加密强度非常低,直接能在请求头中看到,几乎相当于明文了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/65434.html
摘要:步骤接收到状态码的客户端为了通过认证,需要将用户及密码发送给服务器。所谓双因素认证就是指,认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。 确认访问用户身份的认证 某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。下面我们一起来学习一下认证机制。 一. 何为认证 1.计算机...
摘要:步骤接收到状态码的客户端为了通过认证,需要将用户及密码发送给服务器。所谓双因素认证就是指,认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。 确认访问用户身份的认证 某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。下面我们一起来学习一下认证机制。 一. 何为认证 1.计算机...
摘要:步骤接收到状态码的客户端为了通过认证,需要将用户及密码发送给服务器。所谓双因素认证就是指,认证过程中不仅需要密码这一个因素,还需要申请认证者提供其他持有信息,从而作为另一个因素,与其组合使用的认证方式。 确认访问用户身份的认证 某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。下面我们一起来学习一下认证机制。 一. 何为认证 1.计算机...
摘要:项目上线前做十万伏特的防护当然不现实,但至少,我们不要裸奔,穿一套比基尼吧。上目前的最新版本是对应的版本,但验证过也是同样可用的。 ES的HTTP连接没有提供任何的权限控制措施,一旦部署在公共网络就容易有数据泄露的风险,尤其是加上类似elasticsearch-head这样友好的前端界面,简直让你的数据瞬间裸奔在黑客的眼皮底下。项目上线前做十万伏特的防护当然不现实,但至少,我们不要裸奔...
阅读 2263·2021-11-15 11:37
阅读 2923·2021-09-01 10:41
阅读 747·2019-12-27 11:58
阅读 731·2019-08-30 15:54
阅读 701·2019-08-30 13:52
阅读 2908·2019-08-29 12:22
阅读 1051·2019-08-28 18:27
阅读 1432·2019-08-26 18:42