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

PHP에서 API 인증 및 암호화를 위해 JWT 및 JWE를 사용하는 방법

王林
王林원래의
2023-06-17 14:42:472242검색

인터넷이 발전함에 따라 점점 더 많은 웹사이트와 애플리케이션에서 데이터 상호작용을 위한 API 인터페이스를 제공해야 합니다. 이 경우 API 인증과 암호화가 매우 중요한 문제가 됩니다. 널리 사용되는 인증 및 암호화 메커니즘인 JWT와 JWE는 PHP에서 점점 더 많이 사용되고 있습니다. 이 기사에서는 PHP에서 API 인증 및 암호화를 위해 JWT 및 JWE를 사용하는 방법을 설명합니다.

  1. JWT의 기본 개념

JWT는 JSON Web Token의 약자이며 두 당사자 간에 정보를 안전하게 전송하기 위한 컴팩트하고 독립적인 메커니즘입니다. 헤더, 페이로드, 서명의 세 부분으로 구성됩니다. 헤더에는 토큰 유형 및 알고리즘 정보가 포함되고, 페이로드에는 전송해야 할 데이터가 포함되며, 서명은 데이터의 신뢰성을 확인하는 데 사용됩니다.

JWT의 예는 다음과 같습니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.Sfl KxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

그 중 헤더는 {"alg": "HS256", "typ": "JWT"}이고 페이로드는 {"sub ": " 1234567890", "name": "John Doe", "iat": 1516239022}, SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c로 서명되었습니다.

  1. API 인증을 위해 PHP에서 JWT 사용

PHP에서 인증을 위해 JWT를 사용하려면 PHP-JWT와 같은 JWT 라이브러리를 사용해야 합니다. 구체적인 단계는 다음과 같습니다.

(1) PHP-JWT 라이브러리를 다운로드하고 설치합니다. 작곡가를 통해 설치할 수 있습니다.

(2) 다음 코드를 사용하여 인코딩 및 디코딩합니다.

// JWT 인코딩
$jwt = JWT::encode($payload, $key);

// JWT 디코딩
$decoded = JWT::decode ( $jwt, $key, array('HS256'));

그 중 $payload는 전송해야 하는 데이터이고 $key는 서명 키로 필요에 따라 설정할 수 있습니다.

(3) API에서의 인증

API에서 인증을 위해 JWT를 사용하는 기본 아이디어는 사용자가 성공적으로 로그인한 후 사용자가 액세스하면 서버에서 JWT를 생성하고 사용자에게 JWT를 보내는 것입니다. API 요청을 받을 때 JWT를 가져와야 합니다. 서버는 요청을 받을 때 JWT를 디코딩하고 확인하여 사용자의 신원이 합법적인지 확인합니다.

  1. JWE의 기본 개념

JWE는 JSON Web Encryption의 약자로 데이터를 암호화하고 보호하는 메커니즘입니다. 또한 헤더, 암호화된 콘텐츠, 암호화 키의 세 부분으로 구성됩니다. 헤더에는 암호화 알고리즘 및 키 관리 방법에 대한 정보가 포함되고, 암호화된 내용에는 암호화해야 할 데이터가 포함되며, 암호화 키는 데이터를 복호화하는 데 사용됩니다.

다음은 JWE의 예입니다.

eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00iLCJraWQiOiIxMjM0NSIsImlzcyI6InNvbWVDbGllbnQiLCJjcml0IjpbImI2NCJdLCJzdWIi OiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.gXA0McEJXO_ejzOqzUwy_sx14ISFH7ksjwSYZdarlMQRzgb-gMQapghrpyv6grXBTJZbOQxBBzNU8w0W Lw ZijlNQ6QVY_wVQW8cm-W-IM9-rwqw4z6c17LUwJdd_0d9PuX_AhJIu5FKkeqMqYfZXMrE4IlO-9XxWA6sv_aWUjc5QifAAOfQCFx9ICpJ-s1iCZKc8R44vhPdujfA7Pj8bhEsuYUx j04b1g_JqZYlOB04yu9wW8Hu76IlLvAhL19VE4FYsOa9cuXQc4kzbd4x-vylbMnSFzVDqt5PNZPd0-CQq7UZmI_i9tlxK-BW9XWauqQaN6UOsNwcl66uV9TxWg.AxY8DCtDaGlsbG l jb3RoZQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

그 중 헤더는 {" alg": "RSA -OAEP", "enc": "A256GCM", "kid": "12345", "iss": "someClient", "crt": ["b64"]}, 암호화된 콘텐츠는 {" sub": "1234567890" , "name": "John Doe", "iat": 1516239022}, 암호화 키는 AxY8DCtDaGlsbGljb3RoZQ입니다.

  1. PHP에서 API 암호화에 JWE를 사용

PHP에서 암호화에 JWE를 사용하려면 php-jose와 같은 JWE 라이브러리를 사용해야 합니다. 구체적인 단계는 다음과 같습니다:

(1) php-jose 라이브러리를 다운로드하고 설치합니다. 작곡가를 통해 설치할 수 있습니다.

(2) 다음 코드를 사용하여 인코딩 및 디코딩합니다.

// JWE 인코딩
$jwe = (new JWE())

->setPayload($data)
->addRecipient(new JWK($key))
->setAlgorithm('RSA-OAEP')
->setEncryptionAlgorithm('A256GCM')
->addHeader('kid', '12345');

$compact_jwe = $jwe->toCompactJSON();

// 디코드 JWE
$jwe = JWE::loadFromCompact($compact_jwe);
$jwk = new JWK($key);
$plaintext = $jwe->decrypt($jwk);

그 중 $data가 데이터입니다. 암호화해야 하는 경우 $key는 필요에 따라 설정할 수 있는 암호화 키입니다.

(3) API에서의 암호화

API에서 암호화를 위해 JWE를 사용하는 기본 아이디어는 서버가 API 응답을 생성할 때 JWE를 사용하여 응답 데이터를 암호화한 다음 암호화된 데이터를 클라이언트에 보내는 것입니다. 클라이언트는 응답을 받은 후 응답을 해독합니다.

  1. 요약

이 문서에서는 PHP에서 API 인증 및 암호화를 위해 JWT 및 JWE를 사용하는 방법을 설명합니다. JWT를 사용하면 API 요청의 ID 적법성과 데이터 무결성을 보장할 수 있으며, JWE를 사용하면 API 응답 데이터의 기밀성을 보장할 수 있습니다. 실제 프로젝트에서는 필요에 따라 적절한 인증 및 암호화 메커니즘을 선택할 수 있습니다.

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

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