😽
Node Express Passport ダイジェスト認証
ダイジェスト認証とは
Digest認証は、Basic認証の欠点を改善した認証方式データをハッシュ化して送ります。
作成方法
ディレクトリを作成します。
md digest
cd digest
プロジェクトを初期化します。
npm init -y
必要なモジュールをインストールします。
npm install express passport passport-http
ファイル名app.jsを新規作成、下記のコードを記載します。
const express = require('express');
const passport = require('passport');
const passportHttp = require('passport-http')
const app = express();
const record = { username: 'user', password: 'pass' }
passport.use(new passportHttp.DigestStrategy({ qop: 'auth'} ,
(username,cb) => {
if (username === record.username) {
return cb(null, username, record.password);
} else {
return cb(null,false)
}
}
));
app.get('/',
passport.authenticate('digest', {
session: false
}),
(req, res) => {
res.send('認証されました')
});
app.listen(3000, () => console.log('listening on port 3000!'))
node app.js
を起動します。
次にVisual Studio Codeの機能拡張で、Rest Clientをインストールし同じフォルダにサーバーに認証されたユーザーのuser.httpを作成し下記を記載します。
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest user pass
Send Requestを押すと以下に正常に認証するレスポンスが返却されます。
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 21
ETag: W/"15-AeVImKWjpH0ackqigmY5l7mJ8Zs"
Date: Sat, 25 Jun 2022 14:01:45 GMT
Connection: close
認証されました
次のサーバーに認証されていないユーザー
nouser.httpを作ります。
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest nouser pass
Send Requestを押すと認証されないレスポンスが返却されます。
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
WWW-Authenticate: Digest realm="Users", nonce="w71LHOZ2zjn2PnX434T4ujUeQ1mbCQih", qop="auth"
Date: Sat, 25 Jun 2022 14:03:26 GMT
Connection: close
Content-Length: 12
Unauthorized
さらにユーザーであるがパスワードが間違っているパスワード
nopass.httpを作ります。
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest user nopass
Send Requestを押すと認証されないレスポンスが返却されます。
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
WWW-Authenticate: Digest realm="Users", nonce="iBnVfsyvbIVh9NK5Ew35H5DRH582L848", qop="auth"
Date: Sat, 25 Jun 2022 14:05:37 GMT
Connection: close
Content-Length: 12
Unauthorized
以上となります。Node.js Express passportでダイジェスト認証を行ないました。
ちなみにRest Clientのファイルは、user.httpに、nouser.httpとnopass.httpを複数行書いて
###
でコマンドを区切ると、1つのファイル内に複数コマンドを書けます。
user.http
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest user pass
###
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest nouser pass
###
GET http://127.0.0.1:3000 HTTP/1.1
Authorization: Digest user nopass
Discussion