ホームページ >ウェブフロントエンド >jsチュートリアル >node.jsでJSON Webトークンを使用します

node.jsでJSON Webトークンを使用します

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-08 10:26:19224ブラウズ

Using JSON Web Tokens with Node.js

API認証は、APIを構築する際の最大の課題の1つであり、APIの最大のセキュリティの脆弱性の1つです。正しい認証メカニズムは、セキュリティの脅威を回避し、認定ユーザーのみが必要なデータにアクセスできるようにすることができます。

サーバー側のアプリケーションを扱うとき、

認証はかつて簡単でした。サーバー上の簡単なセッション検証は、操作に対するユーザーの許可を確保するのに十分です。ただし、APIの出現により、これらの認証の課題に大きな変化がもたらされました。

ただし、APIの場合、セッションを実装することはできません。 APIが常にWebブラウザを使用して呼ばれることを保証することはできないため、APIを保護するためにCookieに頼ることはできません。 APIの重要な機能の1つは、そのステートレス性です。つまり、APIに送信されるすべてのリクエストは、以前または後続の要求に依存しません。したがって、検証リクエストに必要な認証/承認情報を携帯する方法が必要です。

効果的なAPI認証手法は、JSON Webトークン(JWT)を使用することです。この記事では、JWTの詳細を掘り下げ、node.js、JWTをセキュリティメジャーとして使用してREST APIを実装する方法に関する包括的なガイドを提供します。

キーポイント

  1. 安全な通信を確保するためにJWTを実装します。 この記事では、Webアプリケーションで認証用のJWTの実装に関する詳細なガイドを提供します。これには、トークンの生成、送信、検証が含まれます。そうすることで、アクセス制御の侵害を防ぎ、許可された担当者のみがデータにアクセスできるようにすることにより、全体的なAPIセキュリティが強化されます。
  2. JWTのロールベースのアクセス制御。
  3. この記事は、特定のAPIエンドポイントが特定のロールアクセスに制限されているロールベースのアクセス制御の概要を示しています。たとえば、管理者はすべてのユーザーを表示できますが、クライアントはできません。この記事は、JWTトークンでカスタム宣言を管理することにより、これを行います。
  4. REST APIにJWTを実装します。この記事は、node.js、Express、およびJsonwebtokenライブラリを使用してJWT認証用の簡単なREST APIを構築するための段階的なアプローチを提供します。これには、プロジェクトのセットアップ、必要なライブラリのインストール、基本的なユーザーデータベースの作成、ログインおよびユーザーデータエンドポイントの実装が含まれます。このプロセスでは、ユーザーがログインしたときにトークンを生成し、ユーザーの役割に基づいてアクセスを承認または拒否する後続のリクエストでこのトークンを検証することが含まれます。
  5. JSON Webトークン(JWT)とは何ですか?

JSON Webトークン(JWT)は、2つのパーティ(クライアントとサーバー)の間にJSONオブジェクトの形で情報を転送する方法を定義するオープン標準(RFC 7519)です。 2つの当事者間に送信される情報は、プライベート署名を使用してデジタル署名されていることに注意することが重要です。したがって、これは検証されていると見なされ、データは安全に使用できます。

注:通常、JWTはAPIの認証と承認プロセスを構築するために使用されます。

たとえば、ユーザーをリクエストに関連付けるために使用できる情報は、通常JWTに含まれます。これにはユーザーIDとロールが含まれる場合があり、APIはこの情報を使用して、リクエストを送信するユーザーがそうする許可を持っているかどうかを判断できます。

いつJWTを使用する必要がありますか?

通常、JWTトークンの使用を検討する2つの主な状況があります。

  1. 認証/承認。 これは、JWTの最も広く受け入れられているユースケースの1つです。認証トークンを作成してAPIのリクエストを確認し、認定ユーザーが承認操作を実行していることを確認できます。
  2. 情報交換。 JWTを使用して、2つの当事者間で情報を安全に交換することもできます。 JWTSに署名できるため、有効で許容可能なデータのデータとして機能します。たとえば、パブリック/プライベートキーペアを使用すると、送信者が自分自身と呼ばれる人であることを確認できます。これにより、追加のチェックを行うことができ、情報が改ざんされていないことを確認できます。
JWTトークンの構造

すべての関数を実装するために、JWTトークンの構造は固有です。 3つの重要なコンポーネントがあります:

    ヘッダー。
  1. ヘッダーには、HMAC SHA256やRSAなどのトークンタイプJWTと使用される署名アルゴリズムの2つの部分が含まれています。
  2. ペイロード。
  3. ペイロードにはステートメントが含まれています。ステートメントとは、トークンを発行しているエンティティを説明する情報です。たとえば、ユーザーにトークンを発行すると、ユーザーIDやロールなどのステートメントがあります。さらに、JWTトークンには、発行者、発行時間、有効期限などの標準ステートメントのセットもあります。
  4. 署名。
  5. これが作成する必要があるものです。署名を作成するには、エンコードされたヘッダー、エンコードされたペイロード、キー、およびヘッダーで指定されたアルゴリズムを取得して署名する必要があります。これは、送信中にメッセージが変更されないようにするために行われます。
注:JWTトークンは、これらの3つのコンポーネントを含む単純なBase64文字列で、それぞれが

で区切られています。 . たとえば、単純なトークンは次のようになるかもしれません:

さらに、デコードトークンは以下のように見える場合があります。
<code>header.payload.signature</code>

Using JSON Web Tokens with Node.js ご覧のとおり、ヘッダー、ペイロード、および署名がデコードされて表示されます。

jwtプロセス

さあ、JWTを使用してAPIを構築するときは、以下を考慮する必要があります。

login

    トークン生成
  1. トークン検証
  2. これは、次の図に示されているものと似ている可能性があります。

ループは、ユーザーが初めてAPIにログインするリクエストを送信すると開始されます。ユーザー名とパスワードを提供します。 APIは、資格情報が有効であることを確認し、もしそうなら、ユーザーにJWTトークンを生成します。 Using JSON Web Tokens with Node.js

次に、ユーザーは、リクエストが実行されるたびに、リクエストヘッダー - 承認 - 担当者のトークンとしてトークンを含めます。 APIは、すべてのリクエストのリクエストヘッダーを表示し、トークンをデコードして検証してリクエストを承認する必要があります。

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.jsdatabase.js

次に、APIを定義するための
<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>

安全性:

この例は単純なデモであり、生産環境には適していないことを忘れないでください。 生産環境では、次のようなより厳格な安全対策を講じる必要があります。
  • 強い暗号化アルゴリズムを使用します。
  • httpsを使用します。
  • より細かい粒状アクセス制御を実装します。
  • 定期的にキーを回転させます。
  • より安全なパスワードハッシュアルゴリズム(bcryptなど)を使用します。
  • レートの制限を使用して、ブルートフォースの亀裂を防ぎます。

残りの部分(検証ミドルウェアとルーティング保護)は、変更されたログインエンドポイントとデータベース構造に基づいて、それに応じて調整する必要があります。 常にセキュリティに優先順位を付けることを忘れないでください。

概要

この記事では、JWTを使用して安全なREST APIを構築する方法の概要を簡単に説明します。 ただし、生産環境に展開するには、セキュリティを慎重に検討し、より堅牢なデータベースとエラー処理メカニズムを使用する必要があります。 セキュリティは、継続的な改善と更新が必要な継続的なプロセスであることを忘れないでください。

FAQ(FAQS)(元のテキストの長いFAQセクションは、上記の修正の提案で繰り返されるため、ここでは省略されています)

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

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