JWT(JSON 웹 토큰)는 두 애플리케이션 간에 정보를 안전하게 전송하기 위한 JSON 기반의 개방형 표준입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 헤더에는 토큰에 대한 메타데이터가 포함되고, 페이로드는 실제로 정보가 저장되는 부분이며, 서명은 메시지의 무결성을 확인하는 데 사용됩니다.
이 기사에서는 PHP를 사용하여 JWT를 구현하는 방법을 살펴보겠습니다.
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
먼저, 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字符串。
我们需要使用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的信息的对象。
签名用于验证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 문자열을 반환합니다. 🎜jwt_decode()
함수를 사용해야 합니다. 예는 다음과 같습니다. 🎜rrreee🎜위 예에서는 jwt_decode()
함수를 사용하여 JWT를 확인했습니다. 확인에 성공하면 함수는 JWT 정보가 포함된 객체를 반환합니다. 🎜verify()
함수를 사용하여 서명을 확인했습니다. 이 함수는 부울 값을 반환합니다. 결과가 true이면 서명이 유효하다는 의미입니다. 🎜🎜Summary🎜🎜 이번 글에서는 PHP를 이용하여 JWT를 구현하는 방법을 간략하게 소개했습니다. 먼저 JWT 종속 라이브러리를 설치한 다음 jwt_encode()
함수를 사용하여 토큰을 생성하고 jwt_decode()
함수를 사용하여 토큰을 확인한 다음 마지막으로 verify()를 사용하여 서명을 확인하는 함수입니다. 이러한 기능은 Firebase의 JWT 라이브러리를 통해 구현할 수 있습니다. 🎜
위 내용은 PHP를 사용하여 JWT를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!