インターネットの発展に伴い、データ対話のための API インターフェイスを提供する必要がある Web サイトやアプリケーションがますます増えています。この場合、APIの認証と暗号化が非常に重要な問題となります。一般的な認証および暗号化メカニズムとして、JWT と JWE が PHP で使用されることが増えています。さて、この記事では、PHP で API 認証と暗号化に JWT と JWE を使用する方法を説明します。
JWT は JSON Web Token の略で、2 者間で情報を安全に送信するためのコンパクトな自己完結型メカニズムです。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。ヘッダーにはトークンのタイプとアルゴリズム情報が含まれ、ペイロードには送信する必要のあるデータが含まれ、署名はデータの信頼性を検証するために使用されます。
以下は JWT の例です:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKK F2QT 4fwpMeJf36POk6yJV_adQssw5c
ヘッダーは {"alg": "HS256", "typ": " ですJWT "}、ペイロードは {"sub": "1234567890"、"name": "John Doe"、"iat": 1516239022}、署名は SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c です。
PHP で認証に JWT を使用するには、PHP-JWT などの JWT ライブラリを使用する必要があります。具体的な手順は以下のとおりです。
(1) PHP-JWT ライブラリをダウンロードしてインストールします。 Composer 経由でインストールできます。
(2) 次のコードを使用してエンコードおよびデコードします:
// Encode JWT
$jwt = JWT::encode($payload, $key);
//Decode JWT
$decoded = JWT::decode($jwt, $key, array('HS256'));
このうち、$payload は送信する必要があるデータです、$key は署名です。キーは必要に応じて設定できます。
(3) API での認証
API での認証に JWT を使用する基本的な考え方は、ユーザーが正常にログインした後、サーバーが JWT を生成し、 JWT ユーザーに送信され、ユーザーは API にアクセスするときに JWT を持参する必要があります。サーバーはリクエストを受信したときに JWT をデコードして検証し、ユーザーの ID が正当であるかどうかを判断します。
JWE は JSON Web Encryption の略で、データを暗号化して保護するためのメカニズムです。また、ヘッダー、暗号化されたコンテンツ、暗号化キーの 3 つの部分で構成されます。ヘッダーには暗号化アルゴリズムと鍵管理方法に関する情報が含まれ、暗号化コンテンツには暗号化が必要なデータが含まれ、データを復号化するために暗号化鍵が使用されます。
以下は JWE の例です:
eyJhbGciOiJSU0EtT0FFUCisImVuYyI6IkEyNTZHQ00iLCJraWQiOiIxMjM0NSIsImlzcyI6InNvbWVDbGllbnQiLCJjcml0IjpbImI2NCJdLCJzdWIiOiIxMjM 0NTY3ODkw IiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.gXA0McEJXO_ejzOqzUwy_sx14ISFH7ksjwSYZdarlMQRzgb-gMQapghrpyv6grXBTJZbOQxBBzNU8w0WLwZijlNQ6QVY_ wVQ W8cm-W-IM9-rwqw4z6c17LUwJdd_0d9PuX_AhJIu5FKkeqMqYfZXMrE4IlO-9XxWA6sv_aWUjc5QifAAOfQCFx9ICpJ-s1iCZKc8R44vhPdujfA7Pj8bhEsuYUxj04b1g_JqZYloB 04yu9wW8 Hu76IlLvAhL19VE4FYsOa9cuXQc4kzbd4x-vylbMnSFzVDqt5PNZPd0-CQq7UZmI_i9tlxK-BW9XWauqQaN6UOsNwcl66uV9TxWg.AxY8DCtDaGlsbGljb3RoZQ.SflKxwRJS MeKKF2 QT4fwpMeJf36POk6yJV_adQssw5c
このうち、ヘッダーは {"alg": "RSA-OAEP", "enc": "A256GCM", "kid": "12345", "iss": "someClient", "crt": ["b64"]} 、暗号化されたコンテンツは {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}、暗号化キーは AxY8DCtDaGlsbGljb3RoZQ です。
PHP で暗号化に JWE を使用するには、php-jose などの JWE ライブラリが必要です。具体的な手順は次のとおりです。
(1) php-jose ライブラリをダウンロードしてインストールします。 Composer 経由でインストールできます。
(2) 次のコードを使用してエンコードおよびデコードします。
// Encode JWE
$jwe = (new JWE())
->setPayload($data) ->addRecipient(new JWK($key)) ->setAlgorithm('RSA-OAEP') ->setEncryptionAlgorithm('A256GCM') ->addHeader('kid', '12345');
$compact_jwe = $ jwe->toCompactJSON();
// JWE
$jwe = JWE::loadFromCompact($compact_jwe);
$jwk = new JWK($key);
$ plaintext = $jwe->decrypt($jwk);
このうち、$data は暗号化が必要なデータ、$key は必要に応じて設定できる暗号化キーです。
(3) API での暗号化
API での暗号化に JWE を使用する基本的な考え方は、サーバーが API 応答を生成するときに、JWE を使用して応答データを暗号化し、その後、最終データはクライアントに送信され、クライアントは応答を受信した後にそれを復号化します。
この記事では、PHP での API 認証と暗号化に JWT と JWE を使用する方法について説明します。 JWT を使用すると、API リクエストの ID の正当性とデータの整合性を確保でき、JWE を使用すると、API 応答データの機密性を確保できます。実際のプロジェクトでは、ニーズに応じて適切な認証および暗号化メカニズムを選択できます。
以上がPHP での API 認証と暗号化に JWT と JWE を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。