하나. 기본 인증 개요
HTTP 프로토콜 통신 프로세스 중에 HTTP 프로토콜은 HTTP 서버가 웹 브라우저에서 사용자 ID 카드를 수행 할 수 있도록 기본 인증 프로세스를 정의합니다. 클라이언트가 HTTP 서버에 데이터 요청을하는 경우 클라이언트가 인증되지 않은 경우 HTTP 서버는 기본 인증 프로세스를 통해 클라이언트의 사용자 이름과 비밀번호를 확인하여 사용자가 합법적인지 확인합니다. HTTP 서버의 ID 인증 요청을 수신 한 후 클라이언트는 사용자에게 사용자 이름과 비밀번호를 입력 한 다음 Base64로 사용자 이름과 암호를 암호화합니다. 암호화 된 암호 텍스트는 요청 정보에 첨부됩니다. 예를 들어, 사용자 이름이 Anjuta이고 암호가 123456 인 경우 클라이언트는 사용자 이름과 암호를 ":"와 병합하고 Base64를 Ciphertext로 병합 된 문자열을 암호화하고 데이터가 요청 될 때마다 요청 헤더에 Ciphertext를 추가합니다. HTTP 서버가 요청 패킷을 수신 할 때마다 프로토콜에 따라 클라이언트에 첨부 된 사용자 정보 (Base64 암호화 된 사용자 이름 및 비밀번호)를 얻고 요청 패킷을 풀고 사용자 이름과 암호를 확인합니다. 사용자 이름과 암호가 올바른 경우 클라이언트의 요청에 따라 클라이언트가 요구하는 데이터를 반환합니다. 그렇지 않으면 오류 코드를 반환하거나 클라이언트를 다시 요청하여 사용자 이름과 비밀번호를 제공합니다.
둘. 기본 인증 프로세스
1. 클라이언트는 서버에서 데이터를 요청하고 요청 된 컨텐츠는 웹 페이지 또는 다른 MIME 유형 일 수 있습니다. 현재 클라이언트가 아직 확인되지 않았다고 가정하면 클라이언트는 다음 요청을 서버에 제공합니다.
get /index.html http /1.0
호스트 : www.google.com
2. 서버는 검증 요청 코드 401을 클라이언트로 보냅니다. 서버에서 반환 한 데이터는 다음과 같습니다.
HTTP/1.0 401 무단
서버 : Sokevo/1.0
www-authenticate : Basic Realm = "Google.com"
내용 유형 : Text/HTML
컨텐츠 길이 : xxx
3. HTTP1.0 또는 1.1 사양 (예 : IE, Firefox)을 준수하는 클라이언트가 401 리턴 값을 수신하면 로그인 창이 자동으로 팝업되어 사용자가 사용자 이름과 비밀번호를 입력해야합니다.
4. 사용자가 사용자 이름과 비밀번호를 입력 한 후 사용자 이름과 암호는 Base64 암호화로 암호화되며 암호 텍스트는 이전 요청 정보에 배치됩니다. 클라이언트가 보낸 첫 번째 요청 정보는 다음 컨텐츠가됩니다.
get /index.html http /1.0
호스트 : www.google.com
승인 : 기본 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
참고 : xxxx .... 암호화 된 사용자 이름과 비밀번호를 나타냅니다.
5. 위의 요청 정보를 수신 한 후 서버는 인증 필드 후에 사용자 정보를 검색하고 해독하며 사용자 데이터베이스와 해독 된 사용자 이름 및 비밀번호를 비교하고 확인합니다. 사용자 이름과 암호가 올바른 경우 서버는 요청에 따라 요청 된 리소스를 클라이언트로 보냅니다.
삼. 기본 인증의 단점
HTTP 기본 인증의 목표는 간단한 사용자 인증 기능을 제공하는 것입니다. 인증 프로세스는 간단하고 명확하며 보안 요구 사항이 낮은 시스템 또는 장치에 적합합니다. 예를 들어, 모든 사람이 사용하는 라우터의 구성 페이지의 인증은 거의 항상 채택됩니다. 단점은 도메인 (도메인 또는 영역) 인증 기능을 제공 할 수없는 것과 같은 유연하고 신뢰할 수있는 인증 전략이 없다는 것입니다. 또한 Base64의 암호화 강도는 매우 낮아서 Sohu의 검색이 검색을 방지하지 못하게 할 수 있습니다. 물론 HTTP 기본 인증 시스템은 SSL 또는 Kerberos와 결합하여 보안 성능이 높은 인증 시스템을 달성 할 수 있습니다 (비교적)
네. 기본 인증 Java 구현 코드
httpsession session = request.getSession (); 문자열 user = (문자열) session.getAttribute ( "사용자"); 문자열 통과; if (user == null) {try {response.setcharacterencoding ( "gbk"); printwriter ut = response.getwriter (); 문자열 인증 = request.getheader ( "권한"); if (supportization == null || alustrization.equals ( "")) {response.setstatus (401); Response.SetHeader ( "www-authenticate", "기본 영역 =/"관리자 암호/"를 입력하십시오"); out.print ( "허가를받지 못해 죄송합니다 !!"); 반품; } string userAndPass = 새 문자열 (새 base64decoder (). decodeBuffer (userization.split ( "" ")); if (userAndpass.split (": "). length <2) {response.setstatus (401); 응답 .setheader ("www-authenticate ","기본적으로 입력하십시오. "); 허가를받지 않기 위해 "); return;} user = userandpass.split (": ") [0]; pass = userandpass.split (": ") Dispatcher = GetRequestDispatcher (index.jsp). ex.printstacktrace ()} else {requestDispatcher dispatcher = getRequestDispatcher ( "index.jsp");위의 것은 기본 인증을 사용하여 HTTP의 원칙과 구현 방법에 대한 간단한 논의입니다. 모두가 wulin.com을 더 지원할 수 있기를 바랍니다 ~