>  기사  >  백엔드 개발  >  PHP를 사용하여 JWT를 구현하는 방법

PHP를 사용하여 JWT를 구현하는 방법

PHPz
PHPz원래의
2023-04-24 10:50:102702검색

JWT(JSON 웹 토큰)는 두 애플리케이션 간에 정보를 안전하게 전송하기 위한 JSON 기반의 개방형 표준입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 헤더에는 토큰에 대한 메타데이터가 포함되고, 페이로드는 실제로 정보가 저장되는 부분이며, 서명은 메시지의 무결성을 확인하는 데 사용됩니다.

이 기사에서는 PHP를 사용하여 JWT를 구현하는 방법을 살펴보겠습니다.

  1. 설치 종속성

JWT는 Composer를 통해 설치해야 합니다. Composer를 설치하지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다:

curl -sS https://getcomposer.org/installer | php

그런 다음 Composer 실행 파일을 /usr/local/bin 디렉터리로 이동합니다:

sudo mv composer.phar /usr/local/bin/composer

설치 종속성:

composer require firebase/php-jwt
  1. Create Token

먼저, PHP의 jwt_encode() 함수를 사용하여 토큰을 생성해야 합니다. 예는 다음과 같습니다. jwt_encode()函数创建一个Token。下面是一个示例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$payload = array(
    "iss" => "localhost",
    "aud" => "localhost",
    "iat" => time(),
    "exp" => time()+60*60 //有效期1小时
);

$jwt = JWT::encode($payload, $key);

在上述例子中,我们使用jwt_encode()函数来创建一个JWT。$key变量包含着JWT的密钥,$payload变量包含了需要传输的信息和过期时间。过期时间可以使用PHP的time()函数获取。最后,jwt_encode()函数会返回一个JWT字符串。

  1. 验证Token

我们需要使用PHP的jwt_decode()函数来验证JWT。下面是一个示例:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    print_r($decoded);
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}

在上述例子中,我们使用了jwt_decode()函数来验证JWT。如果验证通过,函数将返回一个包含了JWT的信息的对象。

  1. 验证签名

签名用于验证JWT的完整性。我们需要使用一个密钥来对消息进行签名,这个密钥只有签名验证机制才知道。当接收者接收到消息时,他将使用相同的密钥对这个消息进行解密和验证。

JWT使用了一种叫做“哈希消息认证码”(HMAC)的技术来对JWT进行签名。这个技术需要将JWT的Header和Payload进行哈希计算,然后再与密钥进行组合。接下来是签名验证的例子:

use \Firebase\JWT\JWT;

$key = "my_secret_key"; //密钥
$jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJsb2NhbGhvc3QiLCJhdWQiOiJsb2NhbGhvc3QiLCJpYXQiOjE1NTg2NTQ2OTksImV4cCI6MTU1ODY5MTg5OSwiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsIm5hbWUiOiJhZG1pbiJ9.AmifgOPkE8lx4m4ovHShBc1sPLs9QnNgzuiBZfrjtLw";

try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
    $decoded_array = (array) $decoded;
    $signature_valid = JWT::verify("$jwt->header.$jwt->payload", $jwt->signature, $key);

    if ($signature_valid) {
        echo "Valid signature";
    } else {
        echo "Invalid signature";
    }
} catch (Exception $e) {
    echo 'Invalid token: ' . $e->getMessage();
}

在上述例子中,我们使用了verify()函数来验证签名。这个函数将会返回一个布尔值,如果结果为true,表示签名是有效的。

总结

在这篇文章中,我们简要地介绍了如何使用PHP实现JWT。首先,我们需要安装JWT的依赖库,然后使用jwt_encode()函数创建Token,使用jwt_decode()函数验证Token,最后使用verify()rrreee

위 예에서는 jwt_encode() 함수를 사용하여 JWT를 생성합니다. $key 변수에는 JWT 키가 포함되고, $payload 변수에는 전송될 정보와 만료 시간이 포함됩니다. 만료 시간은 PHP의 time() 함수를 사용하여 얻을 수 있습니다. 마지막으로 jwt_encode() 함수는 JWT 문자열을 반환합니다. 🎜
    🎜Verify Token🎜🎜🎜JWT를 확인하려면 PHP의 jwt_decode() 함수를 사용해야 합니다. 예는 다음과 같습니다. 🎜rrreee🎜위 예에서는 jwt_decode() 함수를 사용하여 JWT를 확인했습니다. 확인에 성공하면 함수는 JWT 정보가 포함된 객체를 반환합니다. 🎜
      🎜서명 확인🎜🎜🎜서명은 JWT의 무결성을 확인하는 데 사용됩니다. 서명 확인 메커니즘에만 알려진 키를 사용하여 메시지에 서명해야 합니다. 수신자가 메시지를 받으면 동일한 키를 사용하여 메시지를 해독하고 확인합니다. 🎜🎜JWT는 "해시 메시지 인증 코드"(HMAC)라는 기술을 사용하여 JWT에 서명합니다. 이 기술을 사용하려면 JWT 헤더와 페이로드를 해싱한 다음 이를 키와 결합해야 합니다. 다음은 서명 확인의 예입니다. 🎜rrreee🎜위의 예에서는 verify() 함수를 사용하여 서명을 확인했습니다. 이 함수는 부울 값을 반환합니다. 결과가 true이면 서명이 유효하다는 의미입니다. 🎜🎜Summary🎜🎜 이번 글에서는 PHP를 이용하여 JWT를 구현하는 방법을 간략하게 소개했습니다. 먼저 JWT 종속 라이브러리를 설치한 다음 jwt_encode() 함수를 사용하여 토큰을 생성하고 jwt_decode() 함수를 사용하여 토큰을 확인한 다음 마지막으로 verify()를 사용하여 서명을 확인하는 함수입니다. 이러한 기능은 Firebase의 JWT 라이브러리를 통해 구현할 수 있습니다. 🎜

위 내용은 PHP를 사용하여 JWT를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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