Basic认证

简介: Basic 概述 Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。 当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。

Basic 概述

Basic 认证是HTTP 中非常简单的认证方式,因为简单,所以不是很安全,不过仍然非常常用。

当一个客户端向一个需要认证的HTTP服务器进行数据请求时,如果之前没有认证过,HTTP服务器会返回401状态码,要求客户端输入用户名和密码。用户输入用户名和密码后,用户名和密码会经过BASE64加密附加到请求信息中再次请求HTTP服务器,HTTP服务器会根据请求头携带的认证信息,决定是否认证成功及做出相应的响应。

使用Tomcat进行Basic认证

如果熟悉Tomcat的朋友,肯定知道Tomcat自带的有个manager项目,访问这个项目需要Basic认证。

下面我们来给我们自己的项目加Basic认证。

配置项目的 web.xml

示例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>lvyou</display-name>
  <servlet>
    <servlet-name>home</servlet-name>
    <servlet-class>com.coder4j.web.servlet.HomeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>home</servlet-name>
    <url-pattern>/home.do</url-pattern>
  </servlet-mapping>

    <!-- 下面是Basic认证配置 -->
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>GuiLin</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>

        <auth-constraint>
            <role-name>lvyou</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>guilin photos</realm-name>
    </login-config>
    <!-- Basic认证配置结束 -->


  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

对上面加注释的部分进行简单的解释:

  • web-resource-name : 给这个认证起个名字

  • url-pattern : 哪些地址需要认证,/*表示此项目的任意地址都需要认证,/lvyou/*表示/lvyou下的任意地址都需要认证。

  • role-name : 哪些角色的用户认证后可以访问此资源(光认证还不够哟,必须得是许可的角色哟),我这里规定必须是lvyou这个角色的用户才能看我的照片。

  • auth-method : 认证方式为BASIC认证。

  • realm-name : 给出的认证提示

修改 tomcat-users.xml

tomcat 提供了用户配置文件,我们直接使用就行了。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="lvyou"/>
  <user username="tom" password="tomcat" roles="lvyou"/>
</tomcat-users>

至此,两步就完成了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://segmentfault.com/a/1190000004406025

 

相关文章
|
4月前
|
Web App开发 搜索推荐 安全
油猴离线安装文件下载,tampermonkey离线安装包下载
油猴脚本(Tampermonkey)是一款强大的浏览器扩展,允许用户通过自定义脚本增强网页功能。支持广告过滤、网盘直链下载、页面优化等多种用途,适用于Chrome、Firefox等主流浏览器。本文提供离线安装包下载及常用插件清单,助你轻松提升浏览效率与体验。
1832 6
|
10月前
|
Linux iOS开发 MacOS
DeepSeek爆火,如何免费部署到你的电脑上?获取顶级推理能力教程来了
如何在本地电脑上免费部署DeepSeek,获取顶级推理能力?只需三步:1. 访问Ollama官网下载并安装对应操作系统的版本(支持macOS、Linux和Windows)。2. 打开Ollama并确保其正常运行。3. 在Ollama官网搜索并选择DeepSeek模型(如deepseek-r1),根据电脑配置选择合适的模型大小(1.5B至671B)。通过终端命令(如ollama run deepseek-r1:1.5b)运行模型,即可开始使用DeepSeek进行推理。退出模型时,在终端输入/bye。更多详情请参考Ollama官方文档。
|
JavaScript C++
vue高亮显示组件--转载
vue高亮显示组件--转载
224 0
|
NoSQL 关系型数据库 MySQL
百万数据量优化实战
在现代互联网业务中,处理百万级别的数据量是家常便饭。传统的单体数据库架构在面对如此庞大的数据量时,往往显得力不从心。本文将分享一次实际的优化案例,探讨如何利用MySQL和Redis共同实现百万级数据统计的优化。
635 4
|
机器学习/深度学习 人工智能 Linux
anaconda conda 切换为国内源 、windows 和 Linux配置方法、 添加清华源——【一文读懂】
请问为什么我使用 Conda 搭建一个深度学习环境半个多小时都没成,而你10分钟就随手搭建一个环境; 讲道理,这就像搬砖,搬的久了,还不能允许我一天多拉几车吗
6637 0
anaconda conda 切换为国内源 、windows 和 Linux配置方法、 添加清华源——【一文读懂】
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
490 0
|
缓存 负载均衡 安全
深入探索Nginx高性能Web服务器配置与优化
【5月更文挑战第7天】本文深入探讨了Nginx的配置与优化,重点介绍了基础配置参数如`worker_processes`、`worker_connections`和`keepalive_timeout`,以及优化策略,包括使用epoll事件驱动模型、开启gzip压缩、启用缓存、负载均衡和安全配置。此外,还提到了性能调优工具,如ab、nginx-stats和nmon,以助于提升Nginx的性能和稳定性。
vos3000外呼系统非标准的11位手机号码开启国内业务和黑白名单时需设置忽略前缀
登录VOS3000管理界面: 使用管理员账号登录VOS3000管理界面。 进入业务配置界面: 在管理界面中找到业务配置或类似的选项,进入到业务配置的设置界面。 设置国内业务规则: 找到国内业务规则设置选项,一般会有关于号码长度、号码前缀等的设置。在此处设置忽略前缀,使系统能够识别非标准的11位手机号码。 设置黑白名单: 进入到黑白名单的设置界面,在添加黑白名单规则时,同样需要设置忽略前缀,以确保能够正确匹配非标准的手机号码。 保存设置: 在完成配置后,记得保存设置,确保所做的修改生效。 测试验证: 设置完成后,进行一些测试验证,确保系统能够正确识别和处理非标准的手机号码,以及正确应用
|
Java Shell Apache
云效流水线使用记录
在云效Flow中配置空任务,添加步骤并保存运行。遇到构建失败问题,日志显示Maven在指定目录找不到`pom.xml`。解决方案包括检查工作空间路径、源代码拉取、Maven命令、启用详细日志和查阅Maven帮助文档。通过这些步骤可解决`MissingProjectException`,确保构建成功。
282 2
|
存储 JSON 数据处理
最为常用的Laravel操作(1)-Eloquent模型
整理了 Laravel 框架 Eloquent 模型最常用的操作,包括一些常用的属性、方法,模型关联等。本系列共有 3 篇文章。
175 2