> 백엔드 개발 > PHP 튜토리얼 > PHP에서 API 인증을 위해 JWT 및 JWS를 사용하는 방법

PHP에서 API 인증을 위해 JWT 및 JWS를 사용하는 방법

WBOY
풀어 주다: 2023-06-17 20:24:02
원래의
1655명이 탐색했습니다.

오늘날의 정보화 시대에 API는 더 이상 소프트웨어 개발 프로세스의 기술이 아니라 최신 웹 애플리케이션에 없어서는 안 될 구성 요소가 되었습니다. API 인터페이스는 공격에 취약하므로 API 개발 시 보안은 중요한 고려 사항 중 하나입니다. JWT(JSON 웹 토큰) 및 JWS(JSON 웹 서명)는 API 보안에 일반적으로 사용되는 두 가지 인증 방법입니다.

JWT는 통신 당사자 간에 정보를 전송하는 데 사용되는 JSON 기반 보안 토큰입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 헤더는 토큰 유형과 알고리즘을 설명하고, 페이로드에는 필수 정보가 포함되며, 서명은 토큰의 신뢰성을 확인하는 데 사용됩니다. JWT를 사용하는 경우 이 토큰은 API 요청에 대한 인증 토큰으로 사용됩니다.

JWS는 텍스트 문자열에 디지털 서명을 추가하는 표준입니다. 이를 통해 신뢰할 수 없는 환경에서 메시지를 안전하게 전송할 수 있으며 보낸 사람 인증 및 메시지 무결성을 보장합니다. JWS는 일반적으로 SHA-256 또는 SHA-512 알고리즘을 사용하여 서명을 생성합니다.

이 기사에서는 API 인증을 위해 PHP에서 JWT 및 JWS를 사용하는 방법을 살펴보겠습니다.

1단계: 종속성 설치

먼저 JWT 및 JWS를 지원하려면 몇 가지 종속성을 설치해야 합니다. 다음 명령을 사용하여 종속성을 설치합니다.

composer require firebase/php-jwt
composer require lcobucci/jwt
로그인 후 복사

2단계: JWT 생성

JWT를 사용하기 전에 먼저 JWT를 생성해야 합니다. 다음은 JWT를 생성하는 데 사용된 PHP 코드입니다.

use FirebaseJWTJWT;

// Set up the JWT payload data
$payload = array(
    "sub" => "1234567890",
    "name" => "John Doe",
    "iat" => 1516239022
);

// Set up the JWT secret key
$secret_key = "YOUR_SECRET_KEY";

// Generate the JWT
$jwt = JWT::encode($payload, $secret_key);
로그인 후 복사

이 코드를 사용하여 JWT를 성공적으로 생성했습니다. 이 코드에서는 헤더, 페이로드 및 서명을 설정합니다. 헤더에는 JWT의 유형과 알고리즘이 포함되고, 페이로드는 사용자 ID, 사용자 이름 등과 같이 우리가 제공하는 데이터로 구성되며 서명은 토큰의 진위 여부를 확인하는 데 사용됩니다.

3단계: JWT 확인

다음 단계는 JWT를 확인하는 것입니다. JWT를 확인하려면 다음 코드를 사용해야 합니다.

use FirebaseJWTJWT;

// Set up the JWT secret key
$secret_key = "YOUR_SECRET_KEY";

// Get the JWT from the request headers
$jwt = getAuthorizationHeader();

// Verify the JWT
try {
    $payload = JWT::decode($jwt, $secret_key, array('HS256'));
} catch (Exception $e) {
    // If the JWT is invalid, return an error response
    return json_encode(array(
        'success' => false,
        'message' => 'Invalid JWT'
    ));
}

// If the JWT is valid, return a success response with the payload data
return json_encode(array(
    'success' => true,
    'message' => 'Valid JWT',
    'payload' => $payload
));

// Function to get the Authorization header from the request
function getAuthorizationHeader()
{
    $headers = apache_request_headers();

    if (isset($headers['Authorization'])) {
        return $headers['Authorization'];
    } else {
        return null;
    }
}
로그인 후 복사

이 코드에서는 JWT::decode() 함수를 사용하여 JWT를 확인합니다. 유효성 검사가 성공하면 JWT 페이로드 데이터가 포함된 객체가 반환되고, 그렇지 않으면 발견된 예외가 오류 응답과 함께 반환됩니다.

4단계: JWS 생성

JWT를 생성하고 검증하는 방법을 마스터했으므로 이제 JWS를 사용하여 API를 보호하는 방법을 알아봅니다. 다음은 JWS를 생성하는 PHP 코드 조각입니다.

use LcobucciJWTBuilder;
use LcobucciJWTSignerHmacSha256;

// Set up the JWT signer
$signer = new Sha256();

// Set up the JWT builder
$builder = new Builder();
$builder->setIssuer('http://example.com');
$builder->setAudience('http://example.org');
$builder->setId('4f1g23a12aa', true);
$builder->setIssuedAt(time());
$builder->setExpiration(time() + 3600);
$builder->set('uid', 1);

// Sign the JWT
$token = $builder->sign($signer, 'YOUR_SECRET_KEY')->getToken();

// Get the token string
$jwt = (string) $token;
로그인 후 복사

5단계: JWS 확인

마지막 단계는 JWS를 확인하는 것입니다. 다음 코드를 사용해야 합니다.

use LcobucciJWTValidationData;

// Set up the JWT secret key
$secret_key = "YOUR_SECRET_KEY";

// Get the JWT from the request headers
$jwt = getAuthorizationHeader();

// Verify the JWS
$token = $signer->loadToken($jwt);
$validationData = new ValidationData();
$validationData->setIssuer('http://example.com');
$validationData->setAudience('http://example.org');
$validationData->setId('4f1g23a12aa');
$validationData->setCurrentTime(time());

if (!$token->validate($validationData) || !$token->verify($signer, $secret_key)) {
    // If the JWS is invalid, return an error response
    return json_encode(array(
        'success' => false,
        'message' => 'Invalid JWS'
    ));
}

// If the JWS is valid, return a success response with the payload data
$payload = $token->getClaims();
return json_encode(array(
    'success' => true,
    'message' => 'Valid JWS',
    'payload' => $payload
));
로그인 후 복사

이 코드에서는 다음을 사용하여 JWT를 로드합니다. loadToken() 메서드 유효성 검사기에서 verify() 메서드를 사용하여 JWT의 내용을 확인하고 verify() 메서드를 사용하여 JWT 서명이 올바른지 확인합니다. 마지막으로 검증에 성공한 경우 JWS에서 얻은 페이로드의 데이터가 포함된 유효한 응답을 제공합니다.

결론

전반적으로, PHP에서 API 인증을 위해 JWT와 JWS를 사용하는 것은 매우 좋은 습관입니다. 이러한 기술을 사용하면 승인된 사용자만 API에 액세스하고 악의적인 사용자로부터 API를 보호할 수 있습니다. 위의 단계를 따르면 PHP에서 이러한 보안 인증을 쉽게 구현할 수 있습니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿