Basic認證: 當客戶端與服務器端進行請求時,允許通過用戶名和密碼實現的一種身份認證方式.
// 如果一個頁面需要Basic認證,它會檢查請求報文頭中的Authorization字段的內容,該字段的值由認證方式和加密值構成:
$ curl -v "http://user:pass@www.baidu.com/"
> GET / HTTP/1.1
> Authorization: Basic dXNlcjpwYXNz
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5
> Host: www.baidu.com
> Accept: */*// 在Basic認證中,它會將用戶和密碼部分組合: username + ":" + password。然后進行Base64編碼,如下所示:
var encode = function (username, password) {return new Buffer(username + ":" + password).toString('base64');
};// 如果用戶首次訪問該網頁,URL地址中也沒有攜帶認證內容,那么瀏覽器會響應一個401未授權狀態碼:
function (req, res){var auth = req.headers['authorization'] || '';var paths = auth.split(' ');var method = parts[0] || ''; // Basicvar encoded = parts[1] || ''; // dXNlcjpwYXNzvar decoded = new Buffer(encoded, 'base64').toString('utf-8').split(":");var user = decoded[0]; // uservar pass = decoded[1]; // passif (!checkUser(user, pass)) {res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"');res.writeHead(401);} else {handle(req, res);}
}
詳情參考《深入淺出Node》P193~P194