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);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23071790/viewspace-709367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTTP認證之基本認證——Basic(一)HTTP
- HTTP認證之基本認證——Basic(二)HTTP
- Shiro實現Basic認證
- 為 Eureka 新增 Http Basic 認證HTTP
- HTTP認證模式:Basic & DigestHTTP模式
- HTTP基礎認證Basic AuthenticationHTTP
- PHP介面HTTP安全認證之Basic模式PHPHTTP模式
- 使用Node在服務端呼叫HTTP-Basic認證的API服務端HTTPAPI
- HTTP 代理原理及實現(2)HTTP
- Basic認證和Bearer Token認證的區別
- Laravel 認證原理及完全自定義認證Laravel
- Nginx 新增 Auth Basic 認證Nginx
- Java HttpClient Basic Credential 認證JavaHTTPclient
- 精講RestTemplate第9篇-如何通過HTTP Basic Auth認證RESTHTTP
- 驗證碼的原理、作用及實現
- Spring Security——基於表單登入認證原理及實現Spring
- WebApi身份認證解決方案(1):Basic基礎認證WebAPI
- TreeMap原理實現及常用方法
- KVO使用及實現原理
- Http基本認證HTTP
- 【Http基本認證】HTTP
- http 框架的路由實現原理HTTP框架路由
- Django框架中的使用者認證的實現Django框架
- PHP框架中使用者認證和授權的實現方法與示例PHP框架
- HTTP認證之摘要認證——Digest(一)HTTP
- 掃碼登入認證技術原理介紹及實踐
- http authorization 基本認證HTTP
- PHP的HTTP認證機制PHPHTTP
- 訪問使用者中心實現認證
- 使用JWT實現Spring Boot令牌認證JWTSpring Boot
- koa 實現 jwt 認證JWT
- 純 JavaScript 實現的 OAuth 認證JavaScriptOAuth
- 使用 ESQL/C 的 PAM 認證方法(轉)SQL
- Flask Basic Auth的實現Flask
- Spring方法注入的使用與實現原理Spring
- Hyperf 下 http 認證元件HTTP元件
- Node.js的Koa實現JWT使用者認證Node.jsJWT
- 基於使用者認證的前後端實現後端