N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第3章18,19節です。
Basic認証
:::note Authorization というヘッダの値に、エンコードされた ID とパスワードを含めて通信することで認証する方式 :::暗号化されていない方式でエンコード(Base64)されているので、盗聴や改竄のリスクがある。
atob
を使うと元の情報が見えてしまう。
http-auth
`http-auth` パッケージを利用する。 `yarn add http-auth@4.1.9`//Basic認証のモジュール
const auth = require('http-auth');
//basic関数
//realmプロパティに、Basic認証に保護する領域を規定する文字列 => 説明書き(認証が必要な範囲を書く)
//コールバックにユーザー名とパスワードのチェック => 認証するパターンを書く
const basic = auth.basic(
{ realm: 'Enquetes Area.'},
(username, password, callback) =>{
callback(username === 'guest' && password === 'xaXZJQmE');
}
)
http.createServer(basic.check((req, res) =>{}
basic.check()
メソッドによって認証処理を行う。
ステータスコードとログアウト
100 番台は、処理中 200 番台は、成功 300 番台は、リダイレクト (場所が移転したため移動を促す) 400 番台は、クライアントのエラー 500 番台は、サーバーのエラー200 - OK は、リクエストの成功
401 - Unauthorized は、アクセス権不正
if(req.url === '/logout'){
res.writeHead(401, {
'Content-Type': 'text/plain; charset=utf-8'
});
res.end('ログアウトしました');
return;
}
Cookie
:::note Web ブラウザに情報を記録するための仕組み。有効期限を設定できる。 :::内部的には HTTP のリクエストヘッダの Cookie という項目と、 レスポンスヘッダの Set-Cookie という項目を利用することで実現している。
Cookieの設定
res.setHeader('Set-Cookie', `last_access=${now};expires=${limit_time}`);
last_access
がキー、値がnow
expires
が有効期限。
Cookieの値取得
const cookies = req.headers.cookie;
const last_access_time = cookies ? parseInt(cookies.split('last_access=')[1]) : now;
last_access=
を区切り文字としてsplit
で配列にする。
もしcookies
がtrue なら cookies
を表示、falseなら現在時刻を表示。
まとめ
PHPではCookieの他にSessionを利用したりしたけれど、Sessionはちょっとイメージしにくかった印象がある。
Basic認証ってルーターの管理画面を覗いたりする時に使われてるくらい?今はあんまり使われてない感じかな。