網頁

2020/4/10

HTTP Basic Authentication 簡介

本篇介紹什麼是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傳輸可輕易地攔截請求來取得帳號及密碼。

沒有留言:

張貼留言