ホームページ  >  記事  >  バックエンド開発  >  JWT (JSON Web Token) ブラックリストを使用して PHP セキュリティ検証を実装する

JWT (JSON Web Token) ブラックリストを使用して PHP セキュリティ検証を実装する

WBOY
WBOYオリジナル
2023-07-24 19:21:311687ブラウズ

JWT (JSON Web Token) ブラックリストを使用して PHP セキュリティ検証を実装する

インターネットの発展に伴い、Web アプリケーションのセキュリティがますます重要になってきています。 PHP アプリケーションのセキュリティ検証を実装する場合、セキュリティ検証ソリューションとして JWT (JSON Web Token) を使用できます。 JWT のセキュリティを強化するために、ブラックリストを使用して期限切れのトークンを管理できます。

JWT は、認証と認可のためのオープン標準 (RFC 7519) です。これは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。ヘッダーにはアルゴリズムとトークン タイプの情報が含まれ、ペイロードにはユーザー データ情報が含まれ、署名はヘッダー、ペイロード、秘密キーの署名に基づいて生成されます。

JWT を使用した認証プロセスは次のとおりです。

  1. ユーザーはユーザー名とパスワードを使用してログインします。
  2. サーバーはユーザーのユーザー名とパスワードを検証し、JWT を生成します。
  3. サーバーは JWT をクライアントに送信します。
  4. クライアントは JWT を Cookie またはローカル ストレージに保存します。
  5. クライアントがリクエストを送信すると、リクエストのヘッダーに JWT が組み込まれます。
  6. サーバーはリクエストを受信した後、JWT の有効性を検証します。検証に合格すると、リクエストの処理を続行します。

ただし、JWT が長期間有効である場合、トークンが漏洩すると、攻撃者はいつでもそのトークンを使用して不正な操作を実行できます。この問題を解決するには、ブラックリストを使用して期限切れのトークンを管理し、ユーザーがログアウトするかパスワードを変更すると、関連するトークンがブラックリストに追加されます。

次は、JWT ブラックリストを使用して PHP セキュリティ検証を実装するコード例です:

// 定义 JWT 的 Secret Key
$secretKey = "your_secret_key";

// 生成 JWT
function generateJWT($userId) {
    global $secretKey;

    $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);
    $payload = json_encode(['userId' => $userId]);

    $base64UrlHeader = base64UrlEncode($header);
    $base64UrlPayload = base64UrlEncode($payload);

    $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true);
    $base64UrlSignature = base64UrlEncode($signature);

    return $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
}

// 验证 JWT 是否有效
function validateJWT($jwt) {
    global $secretKey;

    list($base64UrlHeader, $base64UrlPayload, $base64UrlSignature) = explode('.', $jwt);

    $signature = base64UrlDecode($base64UrlSignature);
    $expectedSignature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $secretKey, true);

    if ($signature !== $expectedSignature) {
        return false;
    }

    $payload = json_decode(base64UrlDecode($base64UrlPayload), true);

    // 在 Blacklist 中查找当前 Token 是否存在
    if (isTokenBlacklisted($jwt)) {
        return false;
    }

    return $payload['userId'];
}

// 将字符串进行 Base64Url 编码
function base64UrlEncode($data) {
    $base64 = base64_encode($data);
    if ($base64 === false) {
        return false;
    }

    // 替换特殊字符
    $base64Url = strtr($base64, '+/', '-_');

    // 删除 = 字符
    $base64Url = rtrim($base64Url, '=');

    return $base64Url;
}

// 将 Base64Url 编码的字符串解码
function base64UrlDecode($base64Url) {
    // 添加 = 字符
    $base64 = str_pad(strtr($base64Url, '-_', '+/'), strlen($base64Url) % 4, '=', STR_PAD_RIGHT);

    return base64_decode($base64);
}

// 将 Token 加入 Blacklist
function blacklistToken($jwt) {
    // 在数据库或缓存中将 Token 标记为失效
}

// 判断 Token 是否在 Blacklist 中
function isTokenBlacklisted($jwt) {
    // 在数据库或缓存中查询 Token 是否存在
}

上記のコード例を使用すると、PHP アプリケーションに JWT セキュリティ検証とブラックリスト管理を簡単に実装できます。 JWT とブラックリストを使用することで、認証のセキュリティを強化し、Web アプリケーションの保護を強化できます。

概要:
この記事では、JWT とブラックリストを使用して PHP セキュリティ検証を実装する方法を紹介します。 JWT を通じてユーザー情報を安全に送信し、ブラックリストを使用して期限切れのトークンを管理し、認証のセキュリティを強化できます。実際の開発では、実際のニーズに応じてコードを最適化および拡張し、特定のシナリオのセキュリティ要件を満たすことができます。

参考リンク:
[1] JSON Web Token (JWT) - https://jwt.io/
[2] RFC 7519 - https://tools.ietf.org/html /rfc7519

以上がJWT (JSON Web Token) ブラックリストを使用して PHP セキュリティ検証を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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