浅谈HTTP使用BASIC认证的原理及实现方法

作者:jingxian 时间:2021-07-18 01:36:16 

一.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,认证
0
投稿

猜你喜欢

  • SpringMVC教程之文件上传与下载详解

    2022-12-21 03:49:09
  • Java实现单向链表反转

    2023-11-18 01:03:11
  • Eclipse IDE可支持Java 14編程

    2022-09-06 10:14:43
  • C#使用TextBox作数据输入方法

    2023-11-16 22:26:14
  • idea install 时提示jdk的某个jar包的包不存在的问题

    2021-12-19 05:48:37
  • Flutter Widget开发之Focus组件图文详解

    2023-06-21 03:47:41
  • Android中使用Toast.cancel()方法优化toast内容显示的解决方法

    2021-12-14 05:17:03
  • mybatisPlus返回Map类型的集合

    2022-01-31 13:37:07
  • c#对象初始化顺序实例分析

    2023-04-08 20:47:09
  • 深入理解C++中public、protected及private用法

    2023-07-02 11:30:17
  • 详解Spring MVC3返回JSON数据中文乱码问题解决

    2023-11-28 19:09:56
  • C#中Convert.ToDecimal()报错问题的解决

    2022-05-09 06:05:56
  • Java高级特性之反射机制实例详解

    2023-10-08 06:33:51
  • c#图像截取实例

    2022-02-21 07:49:58
  • 一文带你全面了解Java Hashtable

    2021-09-19 01:39:39
  • idea创建SpringBoot项目时Type选maven project和maven pom有何区别

    2023-07-04 07:20:27
  • Java concurrency线程池之线程池原理(四)_动力节点Java学院整理

    2023-08-12 21:13:13
  • 利用java操作Excel文件的方法

    2021-12-13 03:03:49
  • BeanUtils.copyProperties在拷贝属性时忽略空值的操作

    2022-07-11 05:22:04
  • Java String类的理解及字符串常量池介绍

    2022-11-14 15:42:22
  • asp之家 软件编程 m.aspxhome.com