日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP使用BASIC认证的原理及实现方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.???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认证的原理及实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。