ホームページ >バックエンド開発 >PHPチュートリアル >PHP での API 認証に JWT と JWS を使用する方法

PHP での API 認証に JWT と JWS を使用する方法

WBOY
WBOYオリジナル
2023-06-17 20:22:001684ブラウズ

今日の情報化時代において、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 サイトの他の関連記事を参照してください。

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