Google Firebase 토큰을 사용하는 라이브러리입니다. 이를 사용하여 사용자 정의 토큰을 생성하고 ID 토큰을 확인할 수 있습니다.
이 라이브러리를 사용하는 PHP용 Firebase Admin SDK로 더 많은 성과를 달성하세요.
SDK의 GitHub 저장소에서 Firebase Admin PHP SDK의 미래에 대해 읽어보세요.
composer require kreait/firebase-tokens
맞춤 토큰이 무엇인지, 어떻게 사용할 수 있는지에 대한 자세한 내용은 Google 공식 문서에서 확인할 수 있습니다.
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ clientEmail = ' ... ' ;
$ privateKey = ' ... ' ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( $ clientEmail , $ privateKey );
$ token = $ generator -> createCustomToken ( ' uid ' , [ ' first_claim ' => ' first_value ' /* ... */ ]);
echo $ token ;
// Output: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.e...
Firebase Admin SDK에 포함된 ID 토큰 확인 방법은 Admin SDK로 생성한 맞춤 토큰이 아니라 클라이언트 SDK에서 제공되는 ID 토큰을 확인하기 위한 것입니다. 자세한 내용은 인증 토큰을 참조하세요.
<?php
use Kreait Firebase JWT Error IdTokenVerificationFailed ;
use Kreait Firebase JWT IdTokenVerifier ;
$ projectId = ' ... ' ;
$ idToken = ' eyJhb... ' ; // An ID token given to your backend by a Client application
$ verifier = IdTokenVerifier:: createWithProjectId ( $ projectId );
try {
$ token = $ verifier -> verifyIdToken ( $ idToken );
} catch ( IdTokenVerificationFailed $ e ) {
echo $ e -> getMessage ();
// Example Output:
// The value 'eyJhb...' is not a verified ID token:
// - The token is expired.
exit ;
}
try {
$ token = $ verifier -> verifyIdTokenWithLeeway ( $ idToken , $ leewayInSeconds = 10000000 );
} catch ( IdTokenVerificationFailed $ e ) {
print $ e -> getMessage ();
exit ;
}
세션 쿠키 확인은 ID 토큰 확인과 유사합니다.
자세한 내용은 세션 쿠키 관리를 참조하세요.
<?php
use Kreait Firebase JWT Error SessionCookieVerificationFailed ;
use Kreait Firebase JWT SessionCookieVerifier ;
$ projectId = ' ... ' ;
$ sessionCookie = ' eyJhb... ' ; // A session cookie given to your backend by a Client application
$ verifier = SessionCookieVerifier:: createWithProjectId ( $ projectId );
try {
$ token = $ verifier -> verifySessionCookie ( $ sessionCookie );
} catch ( SessionCookieVerificationFailed $ e ) {
echo $ e -> getMessage ();
// Example Output:
// The value 'eyJhb...' is not a verified ID token:
// - The token is expired.
exit ;
}
try {
$ token = $ verifier -> verifySessionCookieWithLeeway ( $ sessionCookie , $ leewayInSeconds = 10000000 );
} catch ( SessionCookieVerificationFailed $ e ) {
print $ e -> getMessage ();
exit ;
}
Generator 및 Verifier에서 반환된 토큰은 KreaitFirebaseJWTContractToken
의 인스턴스이며 JWT를 나타냅니다. 표시된 출력은 예시이며 프로젝트의 인증 데이터베이스에 있는 특정 사용자와 관련된 정보에 따라 달라집니다.
JWT 사양에 따르면 iss
, aud
, auth_time
, sub
, iat
, exp
페이로드 필드가 항상 사용 가능할 것으로 예상할 수 있습니다. 다른 필드는 해당 계정의 인증 방법과 프로젝트의 인증 데이터베이스에 저장된 정보에 따라 달라집니다.
$ token = $ verifier -> verifyIdToken ( ' eyJhb... ' ); // An ID token given to your backend by a Client application
echo json_encode ( $ token -> headers (), JSON_PRETTY_PRINT );
// {
// "alg": "RS256",
// "kid": "e5a91d9f39fa4de254a1e89df00f05b7e248b985",
// "typ": "JWT"
// }
echo json_encode ( $ token -> payload (), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES );
// {
// "name": "Jane Doe",
// "picture": "https://domain.tld/picture.jpg",
// "iss": "https://securetoken.google.com/your-project-id",
// "aud": "your-project-id",
// "auth_time": 1580063945,
// "user_id": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
// "sub": "W0IturDwy4TYTmX6ilkd2ZbAXRp2",
// "iat": 1580063945,
// "exp": 1580067545,
// "email": "[email protected]",
// "email_verified": true,
// "phone_number": "+1234567890",
// "firebase": {
// "identities": {
// "phone": [
// "+1234567890"
// ],
// "email": [
// "[email protected]"
// ]
// },
// "sign_in_provider": "custom"
// }
// }
echo $ token -> toString ();
// eyJhb...
$ tokenString = ( string ) $ token ; // string
// eyJhb...
특정 테넌트로 범위가 지정된 사용자 지정 토큰을 만들 수 있습니다.
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
마찬가지로, 특정 테넌트 범위 내에서 ID 토큰이 발급되었는지 확인할 수 있습니다.
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
세션 쿠키는 현재 테넌트를 지원하지 않습니다.
ID 토큰을 확인하기 위해 확인자는 현재 사용 가능한 Firebase 공개 키를 가져오기 위해 호출합니다. 키는 기본적으로 메모리에 캐시됩니다.
공개 키를 보다 효과적으로 캐시하려면 psr/simple-cache 또는 psr/cache 구현으로 검증기를 초기화하여 Google 서버에 대한 HTTP 요청 양을 줄일 수 있습니다.
다음은 Symfony 캐시 구성 요소를 사용하는 예입니다.
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
최신 버전만 적극적으로 지원됩니다.
이전 버전은 가장 낮은 PHP 요구 사항이 보안 수정 사항을 받는 한 보안 수정 사항을 받게 됩니다. 예를 들어, 버전이 PHP 7.4 및 PHP 8.0을 지원하는 경우 PHP 7.4에 대한 보안 지원이 종료되면 보안 지원도 종료됩니다.
버전 | 최초 출시 | 지원되는 PHP 버전 | 상태 |
---|---|---|---|
5.x | 2023년 11월 25일 | ~8.1.0, ~8.2.0, ~8.3.0 | 활동적인 |
4.x | 2022년 11월 26일 | ~8.1.0, ~8.2.0, ~8.3.0 | 보안 지원 |
3.x | 2022년 4월 25일 | ^7.4, ^8.0 | 수명 종료 |
2.x | 2022년 1월 3일 | ^7.4, ^8.0 | 수명 종료 |
1.x | 2017년 2월 6일 | >=5.5 | 수명 종료 |
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.