ExpressJSでの基本認証の仕組み

Express.JSには、承認用の組み込みミドルウェアがあります。 アプリケーションへのアクセスを本当にブロックしたい場合は、エクスプレスアプリケーションのセットアップに1行追加するだけです。

app.use(express.basicAuth('username', 'password'));
      
      





ミドルウェアは代替オプションもサポートしています-コールバック付き:

 app.use(express.basicAuth(function(user, pass, next) { var result = (user === 'testUser' && pass === 'testPass'); next(null /* error */, result); }));
      
      





また、特定のURLのみにアクセスを制限する必要がある場合、ミドルウェアはグローバルではなく、ルーターのフレームワーク内でのみ使用できます。 つまり、このように:

 var auth = express.basicAuth(function(user, pass, next) { var result = (user === 'testUser' && pass === 'testPass'); next(null, result); }); app.get('/home', auth, function(req, res) { res.send('Hello World'); });
      
      





内部に入らない場合は、これを行うことができます。 ベン図にいる人たちは、「中に何が入っているのだろう」と「基本的なApache認証がどのように機能するかわからない」という円の間にいるので、猫に誘います。



basicAutnはconnectからexpressを継承します。 それは非常に単純に配置されています-ブラウザがサーバーからページを要求すると、サーバーはWWW-Authenticate



ヘッダーを使用して承認の必要性についてブラウザーに通知します。

  res.statusCode = 401; res.setHeader('WWW-Authenticate', 'Basic realm="' + realm + '"'); res.end('Unauthorized');
      
      





これに応答して、ブラウザはログインとパスワードの入力フォームを描画し、ユーザーが入力を完了するのを待ってから、2番目のリクエストをサーバーに送信します。 今回は、リクエストにすでにAuthorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=



が含まれています。ここで、 dXNlcm5hbWU6cGFzc3dvcmQ=



はストリング「username:password」にすぎません。 これは簡単に確認できます。

 var str = new Buffer('dXNlcm5hbWU6cGFzc3dvcmQ=', 'base64').toString() console.log(str) //  'username:password'
      
      





これで、ブラウザはこの行を各リクエストに添付し、basicAuthはリクエストに正しいユーザーデータが指定されているかどうかを注意深くチェックします。 このメカニズムは安全ではありませんが、プロジェクトへのアクセスを迅速かつ簡単に制限する必要がある場合、これは非常に適しています。



basicAuthの内部で発生することのソースコードは、 接続ドキュメントに記載されています。



All Articles