>백엔드 개발 >PHP 튜토리얼 >JWT 인증 및 인증에 PHP를 사용하는 방법은 무엇입니까?

JWT 인증 및 인증에 PHP를 사용하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-08-07 10:12:201392검색

JWT 인증 및 인증에 PHP를 사용하는 방법은 무엇입니까?

JWT(JSON 웹 토큰)는 인증 및 승인을 위한 개방형 표준입니다. 이는 클라이언트와 서버 간에 안전하고 신뢰할 수 있는 방식으로 데이터를 전송하며 서버가 요청을 보내는 사용자의 신원을 확인할 수 있도록 합니다. 이 기사에서는 PHP를 사용하여 JWT 인증 및 인증 기능을 구현하는 방법을 소개합니다.

  1. 종속 라이브러리 설치
    JWT는 Firebase PHP JWT와 lcobucci/jwt라는 두 가지 라이브러리에 의존합니다. Composer를 사용하여 다음 두 라이브러리를 설치할 수 있습니다.
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의 적법성을 확인하고 사용자의 신원 정보를 얻어야 합니다. 다음은 샘플 코드입니다.
<?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. Refresh 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.