自分的メモ要素が強いです。
Basic認証とは?
HTTPのプロトコルで定義されている。
ヘッダの値に、エンコードされたIDとパスワードを含めて通信することで認証する方式。
しかし、暗号化されないBase64という方式でエンコードを行うために、HTTPSのように暗号化されていないただのHTTPで使用すると盗聴や改ざんされる恐れがある。
Basic認証以外の認証方法でメジャーな方法としては、Cookieというヘッダを利用した認証や、OAuth認証と呼ばれる方式がある。
Bacic認証を実装
まずはBasic 認証をするためのライブラリをインストール
npm install http-auth@3.2.3 --save
index.js
const http = require('http');
const pug = require('pug');
const auth = require('http-auth');
const basic = auth.basic(
{ realm: 'Enter username and password.' },
(username, password, callback) => {
callback(username === 'guest' && password === 'xaXZJQmE');
});
const server = http.createServer(basic, (req, res) => {
console.info('Requested by ' + req.connection.remoteAddress);
res.writeHead(200, {
解説
const auth = require('http-auth');
上記のコードはBasic認証をするためのモジュールを読み込んでいるコード。
const basic = auth.basic(
{ realm: 'Enter username and password.' },
(username, password, callback) => {
callback(username === 'guest' && password === 'xaXZJQmE');
});
上記はBasic認証の設定を行うコード。
basic関数にはオブジェクトと無名関数を渡している。
オブジェクトのrealmプロパティには、Basic認証時に保護する領域を規定する文字列となる。
無名関数では指定された呼び出し方でユーザー名とパスワードを設定。
const server = http.createServer(basic, (req, res) => {
http.createServerの第一引数にbasicオブジェクトを渡してBasic認証に対応させてserverのオブジェクトを作成している。
ログアウトを実装
Basic認証では、特定のURLにアクセスした際に、ステータスコード「401 - Unauthorized」を返すことによってログアウトされる。
index.js
console.info('Requested by ' + req.connection.remoteAddress);
if (req.url === '/logout') {
res.writeHead(401, {
'Content-Type': 'text/plain; charset=utf-8'
});
res.end('ログアウトしました');
return;
}
解説
パスが/logoutであるときに、ステータスコード「401 - Unauthorized」を返す処理。
メッセージ「ログアウトしました」をコンテンツとして書き出して、res.end
でレスポンスを終了している。また、return文でこの関数の実行を終えている。
所感
N予備校のカリキュラム的にはこの後からCookieの実装やデータベースとの連携に入ってくる。
Webサービスを作る際に最低限必要なサーバーサイドの知識は学べそう。