Library untuk bekerja dengan token Google Firebase. Anda dapat menggunakannya untuk membuat token khusus dan memverifikasi Token ID.
Raih lebih banyak pencapaian dengan Firebase Admin SDK untuk PHP (yang menggunakan pustaka ini).
Silakan baca tentang masa depan Firebase Admin PHP SDK di Repositori GitHub SDK.
composer require kreait/firebase-tokens
Informasi lebih lanjut tentang apa itu token khusus dan cara penggunaannya dapat ditemukan di dokumentasi resmi 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...
Metode verifikasi token ID yang disertakan dalam Firebase Admin SDK dimaksudkan untuk memverifikasi token ID yang berasal dari SDK klien, bukan token khusus yang Anda buat dengan Admin SDK. Lihat Token autentikasi untuk informasi lebih lanjut.
<?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 ;
}
Verifikasi cookie sesi mirip dengan verifikasi Token ID.
Lihat Mengelola Cookie Sesi untuk informasi lebih lanjut.
<?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 ;
}
Token yang dikembalikan dari Generator dan Verifier adalah instance KreaitFirebaseJWTContractToken
dan mewakili JWT. Output yang ditampilkan adalah contoh dan bervariasi bergantung pada informasi yang terkait dengan pengguna tertentu dalam database autentikasi proyek Anda.
Menurut spesifikasi JWT, Anda dapat mengharapkan kolom payload berikut selalu tersedia: iss
, aud
, auth_time
, sub
, iat
, exp
. Bidang lainnya bergantung pada metode autentikasi akun tertentu dan informasi yang disimpan dalam database Auth proyek Anda.
$ 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...
Anda dapat membuat token khusus yang tercakup dalam penyewa tertentu:
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
Demikian pula, Anda dapat memverifikasi bahwa token ID diterbitkan dalam lingkup penyewa tertentu:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
Cookie sesi saat ini tidak mendukung penyewa.
Untuk memverifikasi token ID, pemverifikasi melakukan panggilan untuk mengambil kunci publik Firebase yang saat ini tersedia. Kuncinya disimpan dalam cache di memori secara default.
Jika Anda ingin menyimpan kunci publik dalam cache dengan lebih efektif, Anda dapat menginisialisasi verifikator dengan penerapan psr/simple-cache atau psr/cache untuk mengurangi jumlah permintaan HTTP ke server Google.
Berikut ini contoh penggunaan Komponen Cache Symfony:
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
Hanya versi terbaru yang didukung secara aktif.
Versi sebelumnya akan menerima perbaikan keamanan selama persyaratan PHP terendahnya menerima perbaikan keamanan. Misalnya, ketika suatu versi mendukung PHP 7.4 dan PHP 8.0, dukungan keamanan akan berakhir ketika dukungan keamanan untuk PHP 7.4 berakhir.
Versi | Rilis Awal | Versi PHP yang Didukung | Status |
---|---|---|---|
5.x | 25 November 2023 | ~8.1.0, ~8.2.0, ~8.3.0 | Aktif |
4.x | 26 November 2022 | ~8.1.0, ~8.2.0, ~8.3.0 | Dukungan Keamanan |
3.x | 25 April 2022 | ^7.4, ^8.0 | Akhir kehidupan |
2.x | 03 Januari 2022 | ^7.4, ^8.0 | Akhir kehidupan |
1.x | 06 Februari 2017 | >=5.5 | Akhir kehidupan |
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.