node.jsのHTTP認証

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-25 15:32:08146ブラウズ

HTTP Authentication in Node.js

先週、「node.js httpサーバーの作成」という記事で、node.jsでHTTPの基本を紹介しました。本日の記事では、HTTP認証を使用してNode.jsサイトをパスワード攻撃から保護する方法を示します。まず、基本アクセス認証を導入し、次により安全なダイジェストアクセス認証に移行します。

キーポイント

  • 基本アクセス認証とダイジェストアクセス認証は、node.jsの2つのHTTP認証方法です。基本的なアクセス認証はよりシンプルで、ユーザーにユーザー名とパスワードをプロンプトしますが、Digest Access Authenticationは、送信前にパスワードを暗号化するため、より安全です。
  • node.jsユーティリティhtpasswdは、基本的なアクセス認証でパスワードファイルを管理するために使用されますが、htdigestユーティリティはアクセス認証を消化するために使用されます。パスワードはサーバー側のパスワードファイルに保存され、http-authモジュールはHTTPサーバーに認証サポートを追加するために使用されます。
  • HTTP認証のみを使用するだけでは、node.jsアプリケーションのセキュリティを確保するのに十分ではありません。より良いセキュリティのために、HTTPSを介して提供する必要があります。 Express.jsを使用して、node.jsにHTTP認証を実装し、express-basic-authミドルウェアを使用できます。

基本的なアクセス認証

ユーザーが認証を実装するサイトにアクセスすると、システムは自分のユーザー名とパスワードを入力するように促します。ユーザーが有効な資格情報を提供する場合、ページのコンテンツに移動します。そうしないと、「401の不正な」応答で拒否されます。 HTTP認証の最も簡単なタイプは、基本アクセス認証です。

パスワードファイル

サーバー側では、すべてのユーザー名と暗号化されたパスワードがパスワードファイルに保存されます。 node.jsユーティリティhtpasswdを使用して、パスワードファイルを管理できます。インストールするには、次のコマンドを使用します。 htpasswdnode.jsパッケージマネージャーの略で、node.jsでデフォルトでインストールされています。 npm node.jsモジュールのインストールに使用されます。 npmグローバルインストールパッケージにフラグがあります。つまり、システムのパス変数に含まれています。 -g

<code class="language-bash">npm install -g htpasswd</code>

をインストールした後、次のコマンドを使用して新しいユーザーを作成できます。この例では、htpasswdフラグを使用しています。新しいファイルに、「foo」という名前のユーザーを追加します。 -cフラグを使用すると、パスワード「bar」をコマンドラインの一部として指定できます。 -b

コマンドを実行した後、「htpasswd」ファイルを開きます。ユーザー「FOO」のパスワードファイルエントリを以下に示します。この行には、ユーザー名と暗号化されたパスワードが含まれています。これはファイル内の最初で唯一のユーザーであるため、これはファイルの唯一の行である必要があります。
<code class="language-bash">htpasswd -bc htpasswd foo bar</code>

node.js Integration
<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>

次のステップは、HTTPサーバーに認証サポートを追加することです。まず、次のNPMコマンドを使用して

モジュールをインストールする必要があります。

<code class="language-bash">npm install -g htpasswd</code>

次に、「basic_auth_server.js」という新しいファイルを作成し、次のコードを追加します。 http-authモジュールは2行目で参照されていることに注意してください。 3〜7行目で、構成オブジェクトを認証モジュールに渡します。 authRealmフィールドは、認証領域を定義します。 authFileフィールドは、以前に作成したパスワードファイルを指します。 __dirnameは、現在実行中のスクリプトがあるディレクトリを指します。この例では、「htpasswd」ファイルが「basic_auth_server.js」と同じディレクトリにあることを想定しています。 authType構成フィールドは、使用する認証のタイプを示します。 9行目では、基本認証スキームがHTTP接続に適用されます。認証コールバック関数は、さらに処理するための認証されたユーザー名を提供します。

<code class="language-bash">htpasswd -bc htpasswd foo bar</code>

最後に、サーバーを起動します。 https://www.php.cn/link/bb122c8fe6c764e8aae5555e2186a6344に移動することで、サーバーに接続できます。ユーザー名とパスワードを入力するように求められます。以前に作成した資格情報を提供すると、ブラウザは名前で挨拶します。

制限

基本アクセス認証の最大の欠点は、資格情報が単純なテキストとしてネットワークを介して送信されることです。盗聴を防ぐために、そのような認証は、安全な(つまりHTTPS)接続でのみ使用できます。安全な接続が利用できない場合は、代わりにより安全な形式の認証を使用する必要があります。

アクセス認証を解決

デジタルアクセス認証は、基本認証のより安全な代替手段です。ダイジェスト認証により、ネットワークが送信される前にパスワードが暗号化されます。

パスワードファイル

桁認証もパスワードファイルを使用します。ただし、ファイル形式は、基本認証で使用されているファイル形式とはわずかに異なります。 Digest Passwordファイル形式を使用するには、htdigestと呼ばれる別のユーティリティを使用します。次のNPMコマンドを使用して、htdigestをインストールします。

<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>

次に、次のコマンドを使用して新しいパスワードファイルを作成します。同様に、-cフラグが使用されます。今回は、認証フィールドも指定する必要があります。この場合、認証フィールドは「プライベートエリア」です。この例では、ユーザー名は再び「foo」です。パスワードはコマンドに提供されていないことに注意してください。コマンドを入力した後、パスワードを提供するように求められます。

<code class="language-bash">npm install http-auth</code>

htdigest

を実行した後、新しい「htpasswd」ファイルの内側を確認します。 「foo」のエントリを以下に示します。 Digest認証ファイルには、ユーザー名と暗号化されたパスワード、および基本認証ファイルに含まれていない認証領域が含まれています。
<code class="language-bash">npm install -g htpasswd</code>

node.js Integration

ダイジェスト認証をサーバーに統合するには、http-authモジュールを再度使用します。このチュートリアルに従っている場合、モジュールは既にマシンにインストールされている必要があります。次に、サーバーを実装するために「digest_auth_server.js」という新しいファイルを作成します。サーバーコードを以下に示します。サーバーコードは、基本認証サーバーコードとほぼ同じであることに注意してください。違いは、構成オブジェクトのauthTypeフィールドです。この場合、authTypeは「消化」に設定されています。このサーバーは、基本認証サーバーのようにアクセスできます。

<code class="language-bash">htpasswd -bc htpasswd foo bar</code>

結論

この記事では、HTTP認証の基本を紹介します。ここで提供されている例に従うことにより、node.jsアプリケーションは少し安全です。ただし、認証だけでは十分ではないことを知っておく必要があります。セキュリティが主な問題である場合、サイトはHTTPSを介して提供する必要があります。将来の投稿では、HTTPSや他の多くの優れたnode.js機能を調べます。この投稿が気に入ったら、SitePointの最新の印刷コレクションと電子書籍のジャンプスタートに関するすべてを知りたいと思うでしょう。最初の本はドン・ヌグエンの「node.js」です - 詳細については、SitePoint!

(以下はFAQパートです。記事の長さのため、FAQパーツを要約して、コア情報を保持し、重複と冗長性を避けます。 Node.js でのHTTP認証に関する

FAQ(FAQ)

    node.jsでExpress.jsを使用してHTTP認証を実装する方法
  • ミドルウェアを使用します。 サンプルコードは、ユーザー名とパスワードで認証する方法を示しています。 express-basic-auth

  • HTTP認証を使用してnode.jsアプリケーションを保護する方法は?
  • モジュールを使用して、パスワードファイルパスを指定します。 HTTPSを使用してセキュリティを改善してください。 http-auth

  • HTTP認証を使用して複数のユーザーを処理するにはどうすればよいですか?
  • ファイルまたはデータベースを使用して、ユーザー名とパスワードを保存します。

    モジュールはこの機能をサポートしています。 http-auth

  • node.jsでHTTP認証プロンプトをカスタマイズする方法は?
  • オプションを設定します。 realm

  • node.jsの認証障害にどのように対処するか?
  • サーバーは401の不正な応答を送信します。この応答をカスタマイズできます。

  • HTTPSでHTTP認証を使用する方法は?
  • HTTPサーバーの代わりにHTTPSサーバーを作成します。

  • CookieでHTTP認証を使用する方法は?
  • 認証が成功した後、Cookieを設定します。

  • セッションでHTTP認証を使用する方法は?
  • などのセッションミドルウェアを使用します。

  • JSON Webトークン(JWT)でHTTP認証を使用する方法は? たとえば、express-jwtなど、JWTミドルウェアを使用します。

  • OAuthでHTTP認証を使用する方法は? oauthミドルウェア、たとえばpassportを使用します。

要するに、上記はFAQパーツのコアコンテンツを簡単に要約し、元のテキストで擬似オリジナル処理を実行します。 すべての画像リンクは変更されていません。

以上がnode.jsのHTTP認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。