ホームページ  >  記事  >  バックエンド開発  >  JWT認証と認証にPHPを使用するにはどうすればよいですか?

JWT認証と認証にPHPを使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-08-07 10:12:201277ブラウズ

JWT 認証と認証に PHP を使用するにはどうすればよいですか?

JWT (JSON Web Token) は、認証と認可のオープンスタンダードです。これにより、クライアントとサーバーの間で安全かつ信頼性の高い方法でデータが転送され、サーバーがリクエストを送信しているユーザーの身元を確認できるようになります。この記事では、PHPを使用してJWT認証と認証機能を実装する方法を紹介します。

  1. 依存ライブラリのインストール
    JWT は、Firebase PHP JWT と lcobucci/jwt の 2 つのライブラリに依存します。 Composer を使用して、次の 2 つのライブラリをインストールできます。
composer require firebase/php-jwt lcobucci/jwt
  1. JWT の生成
    まず、ユーザーが正常にログインした後に JWT を生成し、クライアントに送信する必要があります。以下はサンプル コードです。
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 用户登录成功后,生成JWT
function generateJWT($userId, $secretKey) {
    $time = time();
    $token = (new Builder())
        ->issuedBy('example.com') // 发行者
        ->permittedFor('example.com') // 接受者
        ->identifiedBy('1', true) // 标识符
        ->issuedAt($time) // 发行时间
        ->expiresAt($time + 3600) // 过期时间
        ->withClaim('userId', $userId) // 自定义声明
        ->getToken(new Sha256(), new Key($secretKey));

    return $token;
}

$jwt = generateJWT(1, 'your-secret-key');
echo $jwt;
  1. JWT の検証
    サーバーがクライアントのリクエストを受信した後、JWT の正当性を検証し、ユーザーの ID 情報を取得する必要があります。サンプル コードは次のとおりです。
<?php

use FirebaseJWTJWT;

// 验证并解析JWT
function verifyJWT($jwt, $secretKey) {
    try {
        $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
        return $decoded;
    } catch (Exception $e) {
        return null;
    }
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$decoded = verifyJWT($jwt, 'your-secret-key');

if ($decoded) {
    $userId = $decoded->userId;
    echo "用户ID:$userId";
} else {
    echo "无效的JWT";
}
  1. リフレッシュ JWT
    JWT はしばらくすると期限切れになりますが、リフレッシュ トークンを使用して有効期間を延長できます。以下はサンプルコードです。
<?php

use FirebaseJWTJWT;
use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// 刷新JWT
function refreshJWT($jwt, $secretKey) {
    $current = time();
    $decoded = JWT::decode($jwt, $secretKey, ['HS256']);
    
    if ($decoded->exp - $current > 1800) { // 如果剩余有效期超过30分钟,则不刷新JWT
        return $jwt;
    }
    
    $newToken = (new Builder())
        ->issuedBy($decoded->iss)
        ->permittedFor($decoded->aud)
        ->identifiedBy($decoded->jti, true)
        ->issuedAt($current)
        ->expiresAt($current + 3600)
        ->withClaim('userId', $decoded->userId)
        ->getToken(new Sha256(), new Key($secretKey));
        
    return $newToken;
}

$jwt = $_SERVER['HTTP_AUTHORIZATION'];
$refreshedJWT = refreshJWT($jwt, 'your-secret-key');

echo $refreshedJWT;

上記の手順により、PHP を使用した JWT 認証と認証機能を簡単に実装できます。もちろん、実際のアプリケーションでは、セキュリティに関するさらなる考慮事項と実践、および特定のニーズに基づく調整が必要です。この記事が JWT の理解と使用に役立つことを願っています。

以上がJWT認証と認証にPHPを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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