>백엔드 개발 >PHP 튜토리얼 >PHP에서 신원 인증을 위해 JWT를 사용하는 방법에 대해 이야기해 보겠습니다.

PHP에서 신원 인증을 위해 JWT를 사용하는 방법에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-03-31 09:10:171256검색

JWT(JSON 웹 토큰)는 인증 및 승인을 위한 개방형 표준입니다. JWT는 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분으로 구성됩니다. JWT를 사용하는 경우 서버는 JWT를 클라이언트에 보내고 클라이언트는 후속 요청에서 JWT를 전달합니다. 서버는 JWT의 서명과 유효 기간을 확인하여 요청의 적법성을 확인합니다.

PHP는 일반적으로 사용되는 웹 개발 언어로, 다양한 JWT 구현 방법을 제공합니다. 다음은 PHP에서 신원 인증을 위해 JWT를 사용하는 방법을 소개합니다.

  1. JWT 설치

JWT를 사용하기 전에 PHP의 JWT 패키지를 설치해야 합니다. 다음 명령을 통해 설치할 수 있습니다.

composer require firebase/php-jwt

설치가 완료된 후 JWT를 프로젝트에 도입할 수 있습니다.

require_once('vendor/autoload.php');
use Firebase\JWT\JWT;
  1. Generate JWT

신원 인증을 수행할 때 서버에서 JWT를 생성하여 보내야 합니다. 클라이언트에게. JWT 생성 프로세스에는 헤더, 페이로드 및 서명 생성이 포함됩니다.

// 将需要编码的数据放到一个关联数组中
$payload = array(
    "user_id" => 123456,
);

// 生成Header
$header = array(
    "alg" => "HS256",  // 采用的加密算法
    "typ" => "JWT"
);

// 生成JWT
$jwt = JWT::encode($payload, SECRET_KEY, 'HS256');
// SECRET_KEY为加密密钥

JWT를 생성한 후 클라이언트에 보내기만 하면 됩니다.

  1. JWT 확인

클라이언트의 후속 요청에서는 JWT를 휴대해야 하며, 서버 확인을 통해 요청의 적법성을 확인해야 합니다. 서버가 JWT를 검증하는 과정에는 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분을 디코딩하고 서명이 올바른지, 유효 기간이 만료되었는지 확인하는 과정이 포함됩니다.

// 解码JWT
$jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));

// 验证Signature和有效期
$jwt_verified = JWT::verify($jwt, SECRET_KEY, array('HS256'));

서명과 유효기간이 모두 확인되면 요청 처리를 계속할 수 있습니다. 확인이 통과되지 않으면 요청을 거부해야 합니다.

  1. JWT 만료 처리

JWT에는 유효 기간이 있으며 유효 기간 동안 여러 요청에 사용할 수 있습니다. 만료 후 클라이언트는 JWT를 다시 가져와 요청에 넣어야 합니다. JWT를 처리할 때 유효기간을 확인해야 합니다.

try {
    // 解码JWT
    $jwt_decoded = JWT::decode($jwt, SECRET_KEY, array('HS256'));
    // 检查有效期
    if ($jwt_decoded->exp < time()) {
        // JWT已过期
        throw new Exception('JWT已过期');
    }
} catch (Exception $e) {
    // JWT无效或已过期
    // 需要重新获取JWT或返回错误
}
  1. 요약

JWT를 사용하여 인증하는 것은 간단하고 효과적인 방법입니다. PHP는 다양한 JWT 구현을 제공하므로 PHP에서 JWT를 매우 쉽게 사용할 수 있습니다. 그러나 JWT의 유효 기간과 올바른 디코딩 및 검증에 주의해야 합니다. 위 내용은 PHP를 사용하여 JWT 인증을 구현하는 단계와 주의사항입니다.

위 내용은 PHP에서 신원 인증을 위해 JWT를 사용하는 방법에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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