JavaScript
Node.js
Ubuntu
Basic認証
N予備校

【N予備校】Basic認証によりログイン、ログアウト

自分的メモ要素が強いです。

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サービスを作る際に最低限必要なサーバーサイドの知識は学べそう。