本篇介紹什麼是HTTP基本認證(HTTP Basic Authentication)。
HTTP Basic Authentication的原始規範出自RFC 2617 - Section 2. Basic Authentication Scheme,新規範修訂於RFC 7617。
HTTP Basic Authentication為一簡單的HTTP請求認證方法,用來保護server端的資源。當client端對server發起請求的同時必須提供帳號(user-id)及密碼(password)讓server端驗證,只有通過驗證才能取得資源。
Client提供Basic Authentication請求的帳號密碼的方式為,
在HTTP Request Headers加入key=Authorization
,value=Basic <basic-credentials>
。
Basic
為Basic Authentication規範的名稱,固定加在前頭。<basic-credentials>
為Basic Authentication的憑證,其為以Base64 encode對<user-id>:<password>
的編碼。
例如帳號為john
,密碼為abc
,則<basic-credentials>
為以Base 64 encode對john:abc
的編碼,也就是am9objphYmM=
。
因此對server資源發出請求時,在Request Headers加入以下欄位。
Authentication: Basic am9objphYmM=
以Postman為例可在Headers發送Basic Auth請求如下。
或直接在Postman的Authorization下選擇Basic Auth,並在右側填入原本的帳號密碼如下。
如果驗證失敗,則回應401 Unauthorized
結果如下
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Realm"
WWW-Authenticate: Basic realm="Realm"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Length: 0
Date: Wed, 26 Feb 2020 14:38:51 GMT
Keep-Alive: timeout=60
Connection: keep-alive
不過Basic Authentication不是安全的驗證方法,因為驗證資料僅以Base64編碼,若網站非HTTPS傳輸可輕易地攔截請求來取得帳號及密碼。
沒有留言:
張貼留言