HTTP基本认证
HTTPï¼ÂHTTPS |
---|
![]() |
çÂÂæÂ¬ |
请æ±ÂæÂ¹æ³ |
æÂ¥æÂÂ主你|
é Âæ¬Âä½ |
çÂÂæ Â碼 |
ç¸堳主颠|
å¨HTTPä¸Âï¼ÂåºæÂ¬è®¤è¯Âï¼Âè±èªÂï¼ÂBasic access authenticationï¼ÂæÂ¯å Â许httpç¨æÂ·ä»£çÂÂï¼Âå¦Âï¼Âç½Â页æµÂè§Âå¨ï¼Âå¨请æ±ÂæÂ¶ï¼ÂæÂÂä¾ ç¨æÂ·å å å£令 çÂÂä¸Âç§ÂæÂ¹å¼ÂãÂÂ
å¨è¿Âè¡ÂåºæÂ¬è®¤è¯ÂçÂÂè¿Âç¨ÂéÂÂï¼Â请æ±ÂçÂÂHTTP头åÂÂ段ä¼ÂÃ¥ÂÂ
å«Authorization
Ã¥ÂÂ段ï¼Âå½¢å¼Âå¦Âä¸Âï¼ Authorization: Basic <Ã¥ÂÂè¯Â>
ï¼Â该åÂÂè¯ÂæÂ¯ç¨æÂ·åÂÂå¯Âç ÂçÂÂç»ÂÃ¥ÂÂçÂÂbase64ç¼Âç ÂãÂÂ
æÂÂÃ¥ÂÂï¼ÂåºæÂ¬è®¤è¯ÂæÂ¯å®Âä¹Âå¨HTTP 1.0è§ÂèÂÂï¼ÂRFC 1945ï¼Âä¸Âï¼ÂÃ¥ÂÂç»ÂçÂÂæÂÂå ³å®Âå ¨çÂÂä¿¡æÂ¯å¯以å¨HTTP 1.1è§ÂèÂÂï¼ÂRFC 2616ï¼ÂÃ¥ÂÂHTTP认è¯Âè§ÂèÂÂï¼ÂRFC 2617ï¼Âä¸ÂæÂ¾å°ãÂÂäºÂ1999å¹´ RFC 2617 è¿ÂæÂÂï¼ÂäºÂ2015å¹´ç RFC 7617 éÂÂæÂ°è¢«å®Âä¹ÂãÂÂ
å¨MDNç½Âç«Âï¼Âå·²ç»ÂæÂÂ对åºÂçÂÂç»´åºæÂÂç« [1]ãÂÂ
ä¼Âç¹
HTTPåºæÂ¬è®¤è¯ æÂ¯ä¸Âç§ÂÃ¥ÂÂÃ¥ÂÂç®ÂÃ¥ÂÂçÂÂæÂÂæÂ¯ï¼Â使ç¨çÂÂæÂ¯ HTTP头é¨åÂÂ段 强å¶ç¨æÂ·è®¿é®ç½Âç»ÂèµÂæºÂï¼ÂèÂÂä¸ÂæÂ¯éÂÂè¿Âå¿ è¦ÂçÂÂcookieãÂÂä¼Âè¯ÂIDãÂÂç»å½Â页é¢çÂÂï¼ÂéÂÂè·åÂÂ访é®æÂ§å¶çÂÂï¼ÂæÂÂ段ãÂÂ
åºæÂ¬ä¸ÂæÂÂæÂÂæµÂè¡ÂçÂÂç½Â页æµÂè§Âå¨é½æÂ¯æÂÂåºæÂ¬è®¤è¯Â[2]ãÂÂåºæÂ¬è®¤è¯Âå¾Âå°Âå¨å¯堬å¼Â访é®çÂÂäºÂèÂÂç½Âç½Âç«Âä¸Â使ç¨ï¼ÂæÂÂæÂ¶åÂÂä¼Âå¨å°ÂÃ¥ÂÂç§ÂæÂÂç³»ç»Âä¸Â使ç¨ï¼Âå¦Âè·¯ç±å¨ç½Â页管çÂÂæÂ¥å£ï¼ÂãÂÂä¹ÂÃ¥ÂÂè¯ÂçÂÂç HTTPæÂÂè¦Â认诠ç¨äºÂæÂ¿ä»£åºæÂ¬è®¤è¯Âï¼Âå Â许å¯Âé¥以ç¸对å®Âå ¨çÂÂæÂ¹å¼Âå¨ä¸Âå®Âå ¨çÂÂéÂÂéÂÂä¸Âä¼ è¾ÂãÂÂ
ç¨ÂåºÂÃ¥ÂÂÃ¥ÂÂç³»ç»Â管çÂÂÃ¥ÂÂæÂÂæÂ¶ä¼Âå¨å¯信ç½Âç»Âç¯å¢Âä¸Â使ç¨åºæÂ¬è®¤è¯ÂãÂÂç±äºÂï¼ÂåºæÂ¬è®¤è¯Â使ç¨çÂÂæÂ¯Base64ï¼Âå¯解ç ÂæÂÂæÂÂæÂÂï¼Âå æÂ¤ä½¿ç¨TelnetçÂÂç½Âç»ÂÃ¥ÂÂ议工堷è¿Âè¡ÂçÂÂè§ÂæÂ¶ï¼Âå¯以ç´æÂ¥è·åÂÂå 容ï¼Âå¹¶ç¨äºÂè¯ÂæÂÂãÂÂ
缺ç¹
åºæÂ¬è®¤è¯ å¹¶æ²¡æÂÂ为传éÂÂÃ¥ÂÂè¯Âï¼Âè±èªÂï¼Âtransmitted credentialsï¼ÂæÂÂä¾Âä»»ä½ÂæÂºå¯ÂæÂ§çÂÂä¿ÂæÂ¤ãÂÂ仠仠使ç¨ Base64 ç¼Âç Âå¹¶ä¼ è¾Âï¼ÂèÂÂ没æÂÂ使ç¨任你å 寠æÂ æÂ£åÂÂç®Âæ³ÂãÂÂå æÂ¤ï¼ÂåºæÂ¬è®¤è¯Â常常å HTTPS ä¸Â起使ç¨ï¼Â以æÂÂä¾ÂæÂºå¯ÂæÂ§ãÂÂ
ç°åÂÂçÂÂæµÂè§Âå¨ä¿ÂÃ¥ÂÂ认è¯Âä¿¡æÂ¯ç´å°æ Âç¾页æÂÂæµÂè§Âå¨被堳éÂÂï¼ÂæÂÂè ç¨æÂ·æ¸ é¤åÂÂå²记å½ÂãÂÂ[3]HTTP没æÂÂ为æÂÂå¡å¨æÂÂä¾Âä¸Âç§ÂæÂ¹æ³ÂæÂÂ示客æÂ·ç«¯ä¸¢å¼Âè¿ÂäºÂ被ç¼ÂÃ¥ÂÂçÂÂå¯ÂéÂ¥ãÂÂè¿ÂæÂÂå³çÂÂæÂÂå¡å¨端å¨ç¨æÂ·ä¸ÂéÂÂéÂÂçÂÂ覽å¨çÂÂæÂ æ³Âä¸Âï¼Â並没æÂÂä¸Âç§ÂæÂÂæÂÂçÂÂæÂ¹æ³ÂæÂ¥è®©ç¨æÂ·çÂȌºãÂÂ
Ã¥ÂÂæÂ¶ HTTP 并没æÂÂæÂÂä¾ÂçÂȌºæÂºå¶ãÂÂä½ÂæÂ¯ï¼Âå¨ä¸ÂäºÂæµÂè§Âå¨ä¸Âï¼ÂÃ¥ÂÂå¨渠é¤åÂÂè¯Âï¼Âcredentials ï¼Âç¼ÂÃ¥ÂÂçÂÂæÂ¹æ³ÂãÂÂ
Ã¥ÂÂçÂÂ
æÂÂÃ¥ÂÂè¿Âç¨Â
è¿Âä¸Â个堸åÂÂçÂÂHTTP客æÂ·ç«¯åÂÂHTTPæÂÂå¡å¨çÂÂ对è¯Âï¼ÂæÂÂå¡å¨å®Â裠å¨åÂÂä¸Âå°计ç®ÂæÂºä¸Âï¼Âlocalhostï¼Âï¼Âå å«以ä¸ÂæÂ¥éª¤ï¼Â
- 客æÂ·ç«¯è¯·æ±Âä¸Â个éÂÂè¦Â身份认è¯ÂçÂÂ页é¢ï¼Âä½ÂæÂ¯æ²¡æÂÂæÂÂä¾Âç¨æÂ·åÂÂÃ¥ÂÂå£令ãÂÂè¿ÂéÂÂ常æÂ¯ç¨æÂ·å¨å°åÂÂæ Âè¾Âå ¥ä¸Â个URLï¼ÂæÂÂæÂ¯æÂÂå¼ÂäºÂä¸Â个æÂÂÃ¥ÂÂ该页é¢çÂÂé¾æÂ¥ãÂÂ
- æÂÂå¡端åÂÂåºÂä¸Â个401åºÂçÂÂç Â[4]ï¼Âå¹¶æÂÂä¾Âä¸Â个认è¯ÂÃ¥ÂÂï¼Âè±èªÂï¼ÂAccess Authenticationï¼Â[5]ï¼Â头é¨åÂÂ段为ï¼Â
WWW-Authenticate
ï¼Â该åÂÂ段为è¦Âæ±Â客æÂ·ç«¯æÂÂä¾ÂéÂÂé ÂçÂÂèµÂæºÂãÂÂ[6]WWW-Authenticate: Basic realm="Secure Area"
该ä¾ÂÃ¥ÂÂï¼ÂBasic
为éªÂè¯ÂçÂÂ模å¼Âï¼Ârealm="Secure Area"
为ä¿ÂæÂ¤åÂÂï¼Âç¨äºÂä¸Âå ¶ä»Â请æ±ÂURIä½Âåºå«ã - æÂ¥å°åºÂçÂÂÃ¥ÂÂï¼Â客æÂ·ç«¯æÂ¾ç¤ºè¯¥è®¤è¯ÂÃ¥ÂÂç»Âç¨æÂ·å¹¶æÂÂ示è¾Âå ¥ç¨æÂ·åÂÂÃ¥ÂÂå£令ãÂÂæÂ¤æÂ¶ç¨æÂ·å¯以éÂÂæÂ©ç¡®å®ÂæÂÂÃ¥ÂÂæ¶ÂãÂÂ
- ç¨æÂ·è¾ÂÃ¥Â
¥äºÂç¨æÂ·åÂÂÃ¥ÂÂå£令åÂÂï¼Â客æÂ·ç«¯è½¯ä»¶å°Â对åÂ
¶è¿Âè¡Âå¤ÂçÂÂï¼Âå¹¶å¨åÂÂÃ¥Â
ÂçÂÂ请æ±Âä¸Âå¢Âå 认è¯Âæ¶ÂæÂ¯å¤´ï¼Âè±èªÂï¼ÂAuthorizationï¼Âç¶åÂÂéÂÂæÂ°åÂÂéÂÂÃ¥ÂÂ次å°Âè¯ÂãÂÂè¿Âç¨Âå¦Âä¸Âï¼Â
- å°Âç¨æÂ·åÂÂÃ¥ÂÂå£令æÂ¼æÂ¥ä¸º
ç¨æÂ·:å¯Âç Â
å½¢å¼ÂçÂÂÃ¥ÂÂ符串ã - å¦ÂæÂÂæÂÂå¡å¨
WWW-Authenticate
Ã¥ÂÂ段æÂÂæÂÂå®Âç¼Âç Âï¼ÂÃ¥ÂÂå°ÂÃ¥ÂÂ符串ç¼Âè¯ÂæÂÂ对åºÂçÂÂç¼Âç Âï¼Âå¦Âï¼ÂUTF-8ï¼Âã - å°ÂÃ¥ÂÂ符串ç¼Âç Â为base64ãÂÂ
- æÂ¼æÂÂ¥
Basic
ï¼ÂæÂ¾å ¥Authorization
头åÂÂ段ï¼Âå°±åÂÂè¿Âæ ·ï¼ÂAuthorization Basic Ã¥ÂÂ符串
ã 示ä¾Âï¼Âç¨æÂ·åÂÂï¼ÂAladdin
ï¼Âå¯Âç Âï¼ÂOpenSesame
ï¼ÂæÂ¼æÂ¥åÂÂ为Aladdin:OpenSesame
ï¼Âç¼Âç ÂÃ¥ÂÂQWxhZGRpbjpPcGVuU2VzYW1l
ï¼Âå¨HTTP头é¨éÂÂä¼ÂæÂ¯è¿Âæ ·ï¼ÂAuthorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l
ã Base64ç¼Âç Âå¹¶éÂÂå å¯Âç®Âæ³Âï¼Âå ¶æÂ æ³Âä¿Âè¯Âå®Âå ¨ä¸ÂéÂÂç§Âï¼Âä» ç¨äºÂå°Âç¨æÂ·åÂÂÃ¥ÂÂå£令ä¸ÂçÂÂä¸Â堼容çÂÂÃ¥ÂÂ符转æÂ¢ä¸ºåÂÂä¸ÂHTTPÃ¥ÂÂ议堼容çÂÂÃ¥ÂÂ符éÂÂãÂÂ
- å°Âç¨æÂ·åÂÂÃ¥ÂÂå£令æÂ¼æÂ¥ä¸º
- å¨æÂ¬ä¾Âä¸Âï¼ÂæÂÂå¡å¨æÂ¥åÂÂäºÂ该认è¯Âå±Âå¹Âå¹¶è¿ÂÃ¥ÂÂäºÂ页é¢ãÂÂå¦ÂæÂÂç¨æÂ·åÂÂæÂ®éÂÂæ³ÂæÂÂæÂ æÂÂï¼ÂæÂÂå¡å¨å¯è½åÂÂ次è¿ÂÃ¥ÂÂ401åºÂçÂÂç Âï¼Â客æÂ·ç«¯å¯以åÂÂ次æÂÂ示ç¨æÂ·è¾Âå ¥å£令ãÂÂ
注æÂÂ:客æÂ·ç«¯æÂÂå¯è½ä¸ÂéÂÂè¦Âç¨æÂ·äº¤äºÂï¼Âå¨第ä¸Â次请æ±Âä¸Âå°±åÂÂéÂÂ认è¯Âæ¶ÂæÂ¯å¤´ãÂÂ
çµæÂÂè¿Âç¨Â
1.客æÂ·ç«¯è¯·æ±Âï¼Â没æÂÂ认è¯Âä¿¡æÂ¯ï¼Â
GET /private/index.html HTTP/1.0
Host: localhost
ï¼Âè·ÂéÂÂä¸Â个æÂ¢è¡Âï¼Â以åÂÂ车ï¼ÂCRï¼Âå æÂ¢è¡Âï¼ÂLFï¼ÂçÂÂå½¢å¼Âï¼Â
2.æÂÂå¡端åºÂçÂÂ
HTTP/1.0 401 Authorization Required
Server: HTTPd/1.0
Date: Sat, 27 Nov 2004 10:18:15 GMT
WWW-Authenticate: Basic realm="Secure Area"
Content-Type: text/html
Content-Length: 311
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>
3.客æÂ·ç«¯è¯·æ±Âï¼ÂæÂÂ认è¯Âä¿¡æÂ¯ï¼Â
ç¨æÂ·åÂÂâÂÂAladdinâÂÂï¼Âå£令 âÂÂopen sesameâÂÂ
GET /private/index.html HTTP/1.0
Host: localhost
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
ï¼Âè·ÂéÂÂä¸Â个空è¡Âï¼Âå¦Âä¸ÂæÂÂè¿°ï¼Â
Authorizationæ¶ÂæÂ¯å¤´çÂÂç¨æÂ·åÂÂÃ¥ÂÂå£令çÂÂå¼å¯以容æÂÂå°ç¼Âç ÂÃ¥ÂÂè§£ç ÂãÂÂ
4.æÂÂå¡端çÂÂåºÂçÂÂ
HTTP/1.0 200 OK
Server: HTTPd/1.0
Date: Sat, 27 Nov 2004 10:19:07 GMT
Content-Type: text/html
Content-Length: 10476
ï¼Âè·ÂéÂÂä¸Â个空è¡Âï¼ÂéÂÂÃ¥ÂÂæÂ¯éÂÂÃ¥ÂÂæÂ®é¡µçÂÂHTMLæÂÂæÂ¬ï¼ÂãÂÂ
Ã¥ÂÂèÂÂæÂÂç®åÂÂ注éÂÂ
- ^ HTTP 身份éªÂè¯Â. MDN Web æÂÂæ¡£. [2020-01-29]. ï¼ÂÃ¥ÂÂå§Âå 容åÂÂæ¡£äºÂ2020-04-14ï¼ ï¼Âä¸ÂæÂÂï¼Â.
- ^ è¿ÂéÂÂçÂÂâÂÂæÂÂæÂÂçÂÂæµÂè¡Âç½Â页æµÂè§Âå¨âÂÂå æÂ¬ä»»ä½Âç®åÂÂå¸Âåº份é¢Âè¶ è¿Â0.2%çÂÂç½Â页æµÂè§Âå¨ï¼ÂÃ¥ÂÂè§Âç½Â页æµÂè§Â卿¯Âè¾ÂäºÂè§£ç½Â页æµÂè§Âå¨对HTTPçÂÂæÂ¯æÂÂ
- ^ Ã¥ÂÂæ¡£å¯æÂ¬. [2010-07-10]. ï¼ÂÃ¥ÂÂå§Âå 容åÂÂæ¡£äºÂ2010-05-26ï¼Â.
- ^ RFC 1945 Section 11. Access Authentication. IETF: 46. May 1996 [3 February 2017]. ï¼ÂÃ¥ÂÂå§Âå 容åÂÂæ¡£äºÂ2010-11-30ï¼Â.
- ^ T., Fielding, Roy; Tim, Berners-Lee; Henrik, Frystyk. Hypertext Transfer Protocol -- HTTP/1.0. tools.ietf.org. [2020-01-28]. ï¼ÂÃ¥ÂÂå§Âå 容åÂÂæ¡£äºÂ2020-01-25ï¼Â.
- ^ Frystyk, Henrik. Hypertext Transfer Protocol -- HTTP/1.0. tools.ietf.org. [2020-01-28]. ï¼ÂÃ¥ÂÂå§Âå 容åÂÂæ¡£äºÂ2020-04-15ï¼ ï¼Âè±è¯Âï¼Â.