先週、「node.js httpサーバーの作成」という記事で、node.jsでHTTPの基本を紹介しました。本日の記事では、HTTP認証を使用してNode.jsサイトをパスワード攻撃から保護する方法を示します。まず、基本アクセス認証を導入し、次により安全なダイジェストアクセス認証に移行します。
キーポイント
htpasswd
は、基本的なアクセス認証でパスワードファイルを管理するために使用されますが、htdigest
ユーティリティはアクセス認証を消化するために使用されます。パスワードはサーバー側のパスワードファイルに保存され、http-auth
モジュールはHTTPサーバーに認証サポートを追加するために使用されます。 express-basic-auth
ミドルウェアを使用できます。 基本的なアクセス認証
ユーザーが認証を実装するサイトにアクセスすると、システムは自分のユーザー名とパスワードを入力するように促します。ユーザーが有効な資格情報を提供する場合、ページのコンテンツに移動します。そうしないと、「401の不正な」応答で拒否されます。 HTTP認証の最も簡単なタイプは、基本アクセス認証です。
サーバー側では、すべてのユーザー名と暗号化されたパスワードがパスワードファイルに保存されます。 node.jsユーティリティhtpasswd
を使用して、パスワードファイルを管理できます。インストールするには、次のコマンドを使用します。 htpasswd
node.jsパッケージマネージャーの略で、node.jsでデフォルトでインストールされています。 npm
node.jsモジュールのインストールに使用されます。 npm
グローバルインストールパッケージにフラグがあります。つまり、システムのパス変数に含まれています。 -g
npm install -g htpasswd
をインストールした後、次のコマンドを使用して新しいユーザーを作成できます。この例では、-c
フラグを使用すると、パスワード「bar」をコマンドラインの一部として指定できます。 -b
htpasswd -bc htpasswd foo bar
node.js Integration
<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
npm install -g htpasswd
次に、「basic_auth_server.js」という新しいファイルを作成し、次のコードを追加します。 http-auth
モジュールは2行目で参照されていることに注意してください。 3〜7行目で、構成オブジェクトを認証モジュールに渡します。 authRealm
フィールドは、認証領域を定義します。 authFile
フィールドは、以前に作成したパスワードファイルを指します。 __dirname
は、現在実行中のスクリプトがあるディレクトリを指します。この例では、「htpasswd」ファイルが「basic_auth_server.js」と同じディレクトリにあることを想定しています。 authType
構成フィールドは、使用する認証のタイプを示します。 9行目では、基本認証スキームがHTTP接続に適用されます。認証コールバック関数は、さらに処理するための認証されたユーザー名を提供します。
htpasswd -bc htpasswd foo bar
最後に、サーバーを起動します。 https://www.php.cn/link/bb122c8fe6c764e8aae5555e2186a6344に移動することで、サーバーに接続できます。ユーザー名とパスワードを入力するように求められます。以前に作成した資格情報を提供すると、ブラウザは名前で挨拶します。
基本アクセス認証の最大の欠点は、資格情報が単純なテキストとしてネットワークを介して送信されることです。盗聴を防ぐために、そのような認証は、安全な(つまりHTTPS)接続でのみ使用できます。安全な接続が利用できない場合は、代わりにより安全な形式の認証を使用する必要があります。
アクセス認証を解決
デジタルアクセス認証は、基本認証のより安全な代替手段です。ダイジェスト認証により、ネットワークが送信される前にパスワードが暗号化されます。
桁認証もパスワードファイルを使用します。ただし、ファイル形式は、基本認証で使用されているファイル形式とはわずかに異なります。 Digest Passwordファイル形式を使用するには、htdigest
と呼ばれる別のユーティリティを使用します。次のNPMコマンドを使用して、htdigest
をインストールします。
<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
次に、次のコマンドを使用して新しいパスワードファイルを作成します。同様に、
npm install http-auth
htdigest
npm install -g htpasswd
ダイジェスト認証をサーバーに統合するには、http-auth
モジュールを再度使用します。このチュートリアルに従っている場合、モジュールは既にマシンにインストールされている必要があります。次に、サーバーを実装するために「digest_auth_server.js」という新しいファイルを作成します。サーバーコードを以下に示します。サーバーコードは、基本認証サーバーコードとほぼ同じであることに注意してください。違いは、構成オブジェクトのauthType
フィールドです。この場合、authType
は「消化」に設定されています。このサーバーは、基本認証サーバーのようにアクセスできます。
htpasswd -bc htpasswd foo bar
結論
この記事では、HTTP認証の基本を紹介します。ここで提供されている例に従うことにより、node.jsアプリケーションは少し安全です。ただし、認証だけでは十分ではないことを知っておく必要があります。セキュリティが主な問題である場合、サイトはHTTPSを介して提供する必要があります。将来の投稿では、HTTPSや他の多くの優れたnode.js機能を調べます。この投稿が気に入ったら、SitePointの最新の印刷コレクションと電子書籍のジャンプスタートに関するすべてを知りたいと思うでしょう。最初の本はドン・ヌグエンの「node.js」です - 詳細については、SitePoint!
(以下はFAQパートです。記事の長さのため、FAQパーツを要約して、コア情報を保持し、重複と冗長性を避けます。 Node.js でのHTTP認証に関する
FAQ(FAQ)
ミドルウェアを使用します。 サンプルコードは、ユーザー名とパスワードで認証する方法を示しています。
express-basic-auth
モジュールを使用して、パスワードファイルパスを指定します。 HTTPSを使用してセキュリティを改善してください。
http-auth
モジュールはこの機能をサポートしています。
http-auth
オプションを設定します。
realm
などのセッションミドルウェアを使用します。
JSON Webトークン(JWT)でHTTP認証を使用する方法は? たとえば、express-jwt
など、JWTミドルウェアを使用します。
OAuthでHTTP認証を使用する方法は? oauthミドルウェア、たとえばpassport
を使用します。
以上がnode.jsのHTTP認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。