JWT とは何ですか?
JWT は json Web トークンの略で、関係者間で情報を JSON オブジェクトとして送信するためのオープンスタンダードな使用法です。これはコンパクトで URL セーフであり、認証や情報交換のために Web アプリケーションで広く使用されています。
JWT は、キーとシークレットを使用してデジタル署名されます。これらのキーと署名を使用して JWT を検証し、ユーザーを認証します。ほとんどの Web システムは JWT を使用して、ユーザーに特定のリソースへのアクセスを許可します。
トークンコンポーネント
JWT には、ヘッダー、ペイロード、署名という 3 つの主要コンポーネントがあります。トークンを作成するとき、ヘッダーとペイロードを渡し、トークンが署名を生成します。
Headre - JWT のヘッダーには、トークンに関するメタデータが含まれています。これには、alg、typ、および kid の 3 つの値が含まれます。 alg はトークンの署名に使用されるアルゴリズムを指定し、typ はトークンのタイプを示し、kid はキーを識別するために使用されるオプションのパラメーターです。子供を含めるかどうかは、ユースケースによって異なります。
{ "alg": "RS256", // allow [HS256,RS256,ES256] "typ": "JWT", // Specific Type Of token "kid": "12345" // Used to indicate which key was used to sign the JWT. This is particularly useful when multiple keys are in use }
ペイロード - ペイロードでは、ユーザー ID やロールなどのユーザー固有のデータをペイロードに追加するカスタム データを指定します。
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
署名 - 署名は、秘密鍵 (HS256 の場合) でヘッダーとペイロードをエンコードするか、秘密鍵 (RSA の場合) で署名し、結果をハッシュすることによって生成されます。この署名はトークンを検証するために使用されます。
トークンの作成方法
先ほど説明したように、JWT にはヘッダー、ペイロード、署名という 3 つのコンポーネントがあります。ヘッダーとペイロードを提供し、それらから署名が生成されます。これらすべてのコンポーネントを組み合わせた後、トークンを作成します。
// Header Encoding Base64Url Encode({ "alg": "RS256", "typ": "JWT" }) → eyJhbGciOiAiUlMyNTYiLCAidHlwIjogIkpXVCJ9 // Payload Encoding Base64Url Encode({ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }) → eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImlhdCI6IDE1MTYyMzkwMjJ9 // Concatenate Encoded header and payload ConcatenatedHash = Base64Url Encode(Header) + "." + Base64Url Encode(Payload) //Create Signature Hash = SHA-256(ConcatenatedHash) Signature = RSA Sign(Hash with Private Key) or HS256 Sign(Hash with secrate) // Create Token Token = Base64UrlEncode(Header) +"."+ Base64UrlEncode(Payload) +"."+ Signature
JWT を作成するプロセスは次のとおりです。ペイロードとヘッダーをエンコードし、それらから署名を生成します。
JWT トークンの検証
前に、JWT の作成方法について説明しました。ここで、JWT を検証する方法について説明します。検証プロセスは基本的にトークン作成の逆です。まず、秘密鍵または公開鍵を使用してトークンを復号します。次に、ヘッダーとペイロードを連結して署名を生成します。生成されたハッシュが署名と一致する場合、トークンは有効です。それ以外の場合は無効です。
// Token we recive in this formate Token = Base64UrlEncode(Header) +"."+ Base64UrlEncode(Payload) +"."+ Signature // Decrypt Signature TokenHash = RSA Decrypt(Hash with Public Key) or HS256 Sign(Hash with secrate) // Generate Hash From Encoded Header and Payload Hash = SHA-256(Base64UrlEncode(Header) +"."+ Base64UrlEncode(Payload)) // Compare Hash if(TokenHash == Hash) "Valid" else "Not Valid"
JWT を使用する利点
- セキュリティ - JWT はデジタル署名されており、データの整合性と信頼性が保証されています
- コンパクト - JWT はサイズが小さいため、ネットワーク上で効率的に送信できます。
- 自己完結型 - JWT にはユーザーに関する必要な情報がすべて含まれており、データベースを複数回クエリする必要性が軽減されます。
JWT は上記のすべての利点を提供するため、ユーザーを承認するためのほとんどの認証メカニズムで一般的な選択肢となっています。さらに、JWT は、DPoP などのさまざまな認証技術とともに使用できます。
コードで JWT を使用する方法
コードで JWT を使用するには、jsonwebtoken npm パッケージを利用します。 JWT を操作するには 2 つの方法があります。秘密キーを使用する簡単な方法と、(公開キーと秘密キーを使用する) キー ペアの方法です。
シークレットの使用
import jwt from 'jsonwebtoken'; // Define the type for the payload interface Payload { userId: number; username: string; } // Secret key for signing the JWT const secretKey: string = 'your-very-secure-secret'; // Payload to be included in the JWT const payload: Payload = { userId: 123, username: 'exampleUser' }; // Sign the JWT const token: string = jwt.sign(payload, secretKey, { expiresIn: '1h' }); console.log('Generated Token:', token);
import jwt from 'jsonwebtoken'; // Secret key for signing the JWT const secretKey: string = 'your-very-secure-secret'; // Verify the JWT try { const decoded = jwt.verify(token, secretKey) as Payload; console.log('Decoded Payload:', decoded); } catch (err) { console.error('Token verification failed:', (err as Error).message); }
KeyPair メソッドの使用
import * as jwt from 'jsonwebtoken'; import { readFileSync } from 'fs'; // Load your RSA private key const privateKey = readFileSync('private_key.pem', 'utf8'); // Define your payload const payload = { sub: '1234567890', name: 'John Doe', iat: Math.floor(Date.now() / 1000) // Issued at }; // Define JWT sign options const signOptions: jwt.SignOptions = { algorithm: 'RS256', expiresIn: '1h' // Token expiration time }; // Generate the JWT const token = jwt.sign(payload, privateKey, signOptions); console.log('Generated JWT:', token);
import * as jwt from 'jsonwebtoken'; import { readFileSync } from 'fs'; // Load your RSA public key const publicKey = readFileSync('public_key.pem', 'utf8'); // Define JWT verify options const verifyOptions: jwt.VerifyOptions = { algorithms: ['RS256'] // Specify the algorithm used }; try { // Verify the JWT const decoded = jwt.verify(token, publicKey, verifyOptions) as jwt.JwtPayload; console.log('Decoded Payload:', decoded); } catch (error) { console.error('Error verifying token:', error); }
結論
要約すると、JSON Web Token (JWT) は、コンパクトな形式を使用して当事者間で情報を安全に送信します。 RSA の署名と検証には、署名に秘密キーを使用し、検証に公開キーを使用することが含まれます。 TypeScript の例では、秘密 RSA キーを使用して JWT を生成し、それを公開 RSA キーで検証して、安全なトークンベースの認証とデータの整合性を確保する方法を示します。
以上がJWT を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1
使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい
