JWT 認証と認証に PHP を使用するにはどうすればよいですか?
JWT (JSON Web Token) は、認証と認可のオープンスタンダードです。これにより、クライアントとサーバーの間で安全かつ信頼性の高い方法でデータが転送され、サーバーがリクエストを送信しているユーザーの身元を確認できるようになります。この記事では、PHPを使用してJWT認証と認証機能を実装する方法を紹介します。
composer require firebase/php-jwt lcobucci/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;
<?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"; }
<?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 サイトの他の関連記事を参照してください。