Http Basic 认证
什么是 http basic 认证呢?
大家有没有碰到过这样的情况,在打开某个链接的时候,浏览器突然弹出一个输入框,要求你输入用户名和密码,如下图:
这就是 Http Basic 认证…..
Http Basic 认证是一种最简单的身份验证方式。当我们通过浏览器访问资源的时候,如果服务器验证用户无权限访问资源。浏览器就会弹出需要用户输入 「用户名: 密码」 的输入框。以进行身份验证。
详细的过程:
- 当用户尝试访问受保护的资源时,服务器会返回HTTP状态码401(未经授权)。
- 服务器还会在响应头中包含一个名为 "WWW-Authenticate" 的字段,该字段指示浏览器使用 Basic 认证。
在 Basic 认证中,服务器返回的响应头字段通常应该是 "WWW-Authenticate",这是 HTTP 规范中规定的标准字段名称。这是因为 "WWW-Authenticate" 是客户端识别服务器要求身份验证的标准方式。
HTTP/1.1 中定义了 "WWW-Authenticate" 头字段的语法如下:
WWW-Authenticate: <type> realm="<realm>"
<type> 表示要使用的认证类型,对于 Basic 认证,这是 "Basic"。
<realm> 是一个可读的描述性字符串,用于指定要求用户提供凭据的领域或领域的名称。
在实际应用中,"WWW-Authenticate" 的值看起来像这样:
WWW-Authenticate: Basic realm="Secure Area"
Secure Area 可以自定义
ps: realm="Secure Area" 是一个领域或区域的名称,用于描述要求用户提供凭据的区域。并没有实际意义。
- 浏览器收到 401 响应后,会弹出一个对话框要求用户输入用户名和密码。
- 用户输入用户名和密码后,浏览器会将这些凭据以Base64编码的形式添加到请求头中,并重新发送请求。
用户输入用户名称和密码后
浏览器会以这样的格式: "username:password" 将字符串Base64编码为后,将其添加到请求头的 "Authorization" 字段中。
- 服务器收到包含凭据的请求后,会解码Base64并验证用户名和密码是否正确。
- 如果用户名和密码正确,服务器将返回请求的资源;否则,它会返回401响应。
以上就是 Http Basic 认证的流程与细节。
Java 代码的简单示例
Java 后端服务器,我们采用 HttpServlet 的方式,只给出了核心部分的代码。
举例在 servlet filter 中,我们获取请求,认证失败,设置返回状态,要求进行 Http Basic 认证:
protected boolean doFilter(ServletRequest request, ServletResponse response, FilterChain var3) throws Exception {
// ... 以上省略认证部分,假设认证失败了,需要返回认证失败的情况
HttpServletResponse httpResponse = (HttpServletResponse)response;
// 返回 401 未授权状态码,要求进行 Http Basic 认证
httpResponse.setStatus(401);
httpResponse.setHeader("WWW-Authenticate", "Basic Realm=Token");
httpResponse.getWriter().write("Unauthorized");
// ... 以下省略
}
当用户访问未经过授权的资源的时候,认证不通过,代码将执行上面的示例部分,httpResponse 响应请求,浏览器就会弹出要求输入用户名称和密码的输入框。如下:
Java后端我们又将收到请求,于是进行解析:
private String handle(ServletRequest request){
HttpServletRequest servletRequest = (HttpServletRequest) request;
// 获取请求头 Authorization 用户输入的用户名和密码
Stirng value = servletRequest.getHeader("Authorization"); // 值:Basic 5byg5LiJOjEyMzQ1Ng==
// 去除头
value = value.replace("Basic ", ""); // 值:5byg5LiJOjEyMzQ1Ng==
// Base64 解码
byte[] data = Base64.getDecoder().decode(value);
return new String(data); //值: 张三:123456
}
以上就是 Java 代码的简单实现。
总结
HTTP Basic 认证是一种简单的身份验证机制,具有一些优点和缺点,下面是它们的总结:
「优点:」
- 「简单和易于实施:」 HTTP Basic 认证非常简单,不需要复杂的配置或开发工作。这使得它容易在Web应用程序中实施和部署。
- 「广泛支持:」 HTTP Basic 认证是HTTP协议的一部分,几乎所有的Web浏览器和HTTP客户端都支持它,这意味着它可以与各种客户端和服务端互操作。
- 「适用于内部网络:」 它适用于内部网络环境,例如公司内部应用程序,因为在这些环境中安全性可能不是最重要的因素。
「缺点:」
- 「不安全的传输:」 HTTP Basic 认证的主要缺点是在传输过程中凭据以明文形式进行Base64编码,并不加密,容易被窃听。为了提高安全性,必须与HTTPS一起使用。
- 「凭据存储在客户端:」 客户端通常会存储用户名和密码,因此如果客户端被不当使用或被恶意访问,凭据可能会泄漏。
- 「不适用于公共网络:」 由于安全性较差,不建议在公共网络上使用HTTP Basic 认证,除非与其他安全措施结合使用,如HTTPS。
- 「无法提供多因素认证:」 HTTP Basic 认证只涉及用户名和密码,无法提供多因素认证的安全性。
总的来说,HTTP Basic 认证是一种简单但不太安全的身份验证方式,适用于内部网络环境或需要无状态通信的情况。但在公共网络上使用时,强烈建议与HTTPS一起使用以提供必要的加密和安全性。对于更高级的安全需求,可能需要考虑其他身份验证方式,如OAuth、JWT、或使用专门的身份验证协议。
更多内容欢迎关注小巫编程室公众号,喜欢文章的话,也希望能给小编点个赞或者转发,你们的喜欢与支持是小编最大的鼓励,小巫编程室感谢您的关注与支持。good good study day day up