ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsでJSON Webトークンを使用します
API認証は、APIを構築する際の最大の課題の1つであり、APIの最大のセキュリティの脆弱性の1つです。正しい認証メカニズムは、セキュリティの脅威を回避し、認定ユーザーのみが必要なデータにアクセスできるようにすることができます。
サーバー側のアプリケーションを扱うとき、認証はかつて簡単でした。サーバー上の簡単なセッション検証は、操作に対するユーザーの許可を確保するのに十分です。ただし、APIの出現により、これらの認証の課題に大きな変化がもたらされました。
ただし、APIの場合、セッションを実装することはできません。 APIが常にWebブラウザを使用して呼ばれることを保証することはできないため、APIを保護するためにCookieに頼ることはできません。 APIの重要な機能の1つは、そのステートレス性です。つまり、APIに送信されるすべてのリクエストは、以前または後続の要求に依存しません。したがって、検証リクエストに必要な認証/承認情報を携帯する方法が必要です。
効果的なAPI認証手法は、JSON Webトークン(JWT)を使用することです。この記事では、JWTの詳細を掘り下げ、node.js、JWTをセキュリティメジャーとして使用してREST APIを実装する方法に関する包括的なガイドを提供します。
キーポイント
JSON Webトークン(JWT)は、2つのパーティ(クライアントとサーバー)の間にJSONオブジェクトの形で情報を転送する方法を定義するオープン標準(RFC 7519)です。 2つの当事者間に送信される情報は、プライベート署名を使用してデジタル署名されていることに注意することが重要です。したがって、これは検証されていると見なされ、データは安全に使用できます。
注:通常、JWTはAPIの認証と承認プロセスを構築するために使用されます。
たとえば、ユーザーをリクエストに関連付けるために使用できる情報は、通常JWTに含まれます。これにはユーザーIDとロールが含まれる場合があり、APIはこの情報を使用して、リクエストを送信するユーザーがそうする許可を持っているかどうかを判断できます。
いつJWTを使用する必要がありますか?
通常、JWTトークンの使用を検討する2つの主な状況があります。
すべての関数を実装するために、JWTトークンの構造は固有です。 3つの重要なコンポーネントがあります:
で区切られています。 .
たとえば、単純なトークンは次のようになるかもしれません:
さらに、デコードトークンは以下のように見える場合があります。
<code>header.payload.signature</code>
ご覧のとおり、ヘッダー、ペイロード、および署名がデコードされて表示されます。
さあ、JWTを使用してAPIを構築するときは、以下を考慮する必要があります。
login
ループは、ユーザーが初めてAPIにログインするリクエストを送信すると開始されます。ユーザー名とパスワードを提供します。 APIは、資格情報が有効であることを確認し、もしそうなら、ユーザーにJWTトークンを生成します。
JWTを使用する場合は、必ずこの手順に従ってください。ヘッダーにJWTトークンが欠落している場合、APIはリクエストを拒否します。
JWT
JWT認証を使用して、単純なREST APIを構築しましょう。これを行うには、次のコマンドでプロジェクトを起動することから始めましょう。
注:デフォルトの構成の使用を続行してください。<code>header.payload.signature</code>次に、使用しているJWTライブラリをインストールしましょう。 JSONWEBTOKENライブラリを使用して、JWTトークンを作成および管理しましょう。
注:このライブラリは、GitHubで頻繁に維持されており、週に1400万件以上のダウンロードがあるため、このライブラリを選択しました。
したがって、
次のコマンドを使用してライブラリをインストールします。次に、APIを構築するためにExpressをインストールしましょう。これを行うには、次のコマンドを実行します
次に、ファイルを作成しましょう。ここではJWTに厳密に焦点を当てているので、データベースを起動するのではなく、ユーザーコード内でデータベースを維持します。したがって、
ファイルを開き、次のコードを含めます。<code class="language-bash">npm init</code>
ご覧のとおり、APIにアクセスできるユーザーのリストを定義します。
<code class="language-bash">npm i jsonwebtoken</code>
注:本番環境でこれを構築している場合は、Amazon Cognitoなどのサービスを使用してユーザーを管理するか、ハッシュを使用してパスワードを保存することを検討することをお勧めします。 database.js
database.js
<code class="language-bash">// express - 用于构建 api // cors - 用于启用跨域请求 // body-parser - 用于将主体解析为 JSON npm i express cors body-parser</code>ファイルを作成します。ファイルを開き、次のコードを含めます。(ここでは、元のコードの例が冗長であり、生産に直接コピーするのに適していないハードコーディングパスワードなどの不要な詳細が含まれているため、ここでは多くのコードが省略されています。環境は、主要な部分の改訂版の提案であり、セキュリティの重要性を強調しています index.js(重要な部品の推奨提案):
まず、安全な
を定義する必要があり、コードでハードコードすることはありませんが、環境変数から読み取る必要があります。
index.js
index.js
その後、ログインエンドポイントは次のようになります:
データベースの設計:
実際のアプリケーションでは、ユーザーデータを保存するには実際のデータベース(MongoDB、PostgreSQLなど)が必要であり、パスワードをハッシュする必要があります。
tokenSecret
エラー処理:データベースエラー、JWT検証エラーなどの処理など、より完全なエラー処理メカニズムが必要です。
<code class="language-javascript">const users = [ { id: '1', name: 'Lakindu', username: 'lak', password: '1234', role: 'customer' }, { id: '2', name: 'David', username: 'david', password: '1234', role: 'customer' }, { id: '3', name: 'John', username: 'john', password: '1234', role: 'customer' }, { id: '4', name: 'Nishanthan', username: 'nishanthan', password: '1234', role: 'customer' }, { id: '5', name: 'Pasindu', username: 'pasindu', password: '1234', role: 'customer' }, { id: '6', name: 'Sahan', username: 'sahan', password: '1234', role: 'admin' }, ] module.exports = { users }</code>
安全性:
この例は単純なデモであり、生産環境には適していないことを忘れないでください。 生産環境では、次のようなより厳格な安全対策を講じる必要があります。残りの部分(検証ミドルウェアとルーティング保護)は、変更されたログインエンドポイントとデータベース構造に基づいて、それに応じて調整する必要があります。 常にセキュリティに優先順位を付けることを忘れないでください。
概要
この記事では、JWTを使用して安全なREST APIを構築する方法の概要を簡単に説明します。 ただし、生産環境に展開するには、セキュリティを慎重に検討し、より堅牢なデータベースとエラー処理メカニズムを使用する必要があります。 セキュリティは、継続的な改善と更新が必要な継続的なプロセスであることを忘れないでください。
FAQ(FAQS)(元のテキストの長いFAQセクションは、上記の修正の提案で繰り返されるため、ここでは省略されています)
以上がnode.jsでJSON Webトークンを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。