今日の情報化時代において、API はもはやソフトウェア開発プロセスにおける単なるテクノロジーではなく、最新の Web アプリケーションに不可欠なコンポーネントとなっています。 API インターフェイスは攻撃に対して脆弱であるため、API を開発する際にはセキュリティが重要な考慮事項の 1 つです。 JWT (JSON Web Token) と JWS (JSON Web Signature) は、API を保護するために一般的に使用される 2 つの認証方法です。
JWT は、通信当事者間で情報を送信するために使用される JSON ベースのセキュリティ トークンです。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。ヘッダーにはトークンのタイプとアルゴリズムが記述され、ペイロードには必要な情報が含まれ、署名はトークンの信頼性を検証するために使用されます。 JWT を使用する場合、このトークンは API リクエストの認証トークンとして使用されます。
JWS は、テキスト文字列にデジタル署名を追加するための標準です。これにより、信頼できない環境でもメッセージを安全に送信でき、送信者の認証とメッセージの整合性が保証されます。 JWS は通常、SHA-256 または SHA-512 アルゴリズムを使用して署名を生成します。
この記事では、PHP で JWT と JWS を使用して API 認証を行う方法について説明します。
ステップ 1: 依存関係をインストールする
まず、JWT と JWS をサポートするためにいくつかの依存関係をインストールする必要があります。次のコマンドを使用して依存関係をインストールします。
composer require firebase/php-jwt composer require lcobucci/jwt
ステップ 2: JWT の生成
JWT を使用する前に、まず JWT を生成する必要があります。以下は、JWT の生成に使用される PHP コードです。
use FirebaseJWTJWT; // Set up the JWT payload data $payload = array( "sub" => "1234567890", "name" => "John Doe", "iat" => 1516239022 ); // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Generate the JWT $jwt = JWT::encode($payload, $secret_key);
このコードにより、JWT が正常に生成されました。このコードでは、ヘッダー、ペイロード、署名を設定します。ヘッダーには JWT のタイプとアルゴリズムが含まれ、ペイロードはユーザー ID、ユーザー名などの提供するデータで構成され、署名はトークンの信頼性を検証するために使用されます。
ステップ 3: JWT を確認する
次のステップは、JWT を確認することです。 JWT を検証するには、次のコードを使用する必要があります:
use FirebaseJWTJWT; // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Get the JWT from the request headers $jwt = getAuthorizationHeader(); // Verify the JWT try { $payload = JWT::decode($jwt, $secret_key, array('HS256')); } catch (Exception $e) { // If the JWT is invalid, return an error response return json_encode(array( 'success' => false, 'message' => 'Invalid JWT' )); } // If the JWT is valid, return a success response with the payload data return json_encode(array( 'success' => true, 'message' => 'Valid JWT', 'payload' => $payload )); // Function to get the Authorization header from the request function getAuthorizationHeader() { $headers = apache_request_headers(); if (isset($headers['Authorization'])) { return $headers['Authorization']; } else { return null; } }
このコードでは、JWT::decode() 関数を使用して JWT を検証します。検証が成功した場合は、JWT ペイロード データを含むオブジェクトが返されます。そうでない場合は、キャッチされた例外がエラー応答とともに返されます。
ステップ 4: JWS を生成する
JWT を生成して検証する方法を習得したので、次は JWS を使用して API を保護する方法を学習します。以下は、JWS を生成する PHP コード スニペットです:
use LcobucciJWTBuilder; use LcobucciJWTSignerHmacSha256; // Set up the JWT signer $signer = new Sha256(); // Set up the JWT builder $builder = new Builder(); $builder->setIssuer('http://example.com'); $builder->setAudience('http://example.org'); $builder->setId('4f1g23a12aa', true); $builder->setIssuedAt(time()); $builder->setExpiration(time() + 3600); $builder->set('uid', 1); // Sign the JWT $token = $builder->sign($signer, 'YOUR_SECRET_KEY')->getToken(); // Get the token string $jwt = (string) $token;
ステップ 5: JWS を検証する
最後のステップは JWS を検証することです。次のコードを使用する必要があります:
use LcobucciJWTValidationData; // Set up the JWT secret key $secret_key = "YOUR_SECRET_KEY"; // Get the JWT from the request headers $jwt = getAuthorizationHeader(); // Verify the JWS $token = $signer->loadToken($jwt); $validationData = new ValidationData(); $validationData->setIssuer('http://example.com'); $validationData->setAudience('http://example.org'); $validationData->setId('4f1g23a12aa'); $validationData->setCurrentTime(time()); if (!$token->validate($validationData) || !$token->verify($signer, $secret_key)) { // If the JWS is invalid, return an error response return json_encode(array( 'success' => false, 'message' => 'Invalid JWS' )); } // If the JWS is valid, return a success response with the payload data $payload = $token->getClaims(); return json_encode(array( 'success' => true, 'message' => 'Valid JWS', 'payload' => $payload ));
この段落内 コードでは、loadToken() メソッドを使用して JWT をバリデーターにロードし、validate() メソッドを使用して JWT の内容を検証し、verify() メソッドを使用して JWT の内容を検証します。 JWT 署名は正しいです。最後に、検証が成功した場合は、JWS から取得したペイロードのデータを含む有効な応答を提供します。
結論
全体として、PHP での API 認証に JWT と JWS を使用することは非常に良い方法です。これらの技術を使用すると、許可されたユーザーのみが API にアクセスできるようにし、悪意のあるユーザーから API を保護できます。上記の手順に従うことで、この安全な認証を PHP で簡単に実装できます。
以上がPHP での API 認証に JWT と JWS を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。