Eine Bibliothek zum Arbeiten mit Google Firebase-Tokens. Sie können damit benutzerdefinierte Token erstellen und ID-Token überprüfen.
Erreichen Sie mehr mit dem Firebase Admin SDK für PHP (das diese Bibliothek verwendet).
Bitte lesen Sie mehr über die Zukunft des Firebase Admin PHP SDK im GitHub Repository des SDK.
composer require kreait/firebase-tokens
Weitere Informationen darüber, was ein benutzerdefiniertes Token ist und wie es verwendet werden kann, finden Sie in der offiziellen Dokumentation von 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...
Die in den Firebase Admin SDKs enthaltenen ID-Token-Überprüfungsmethoden dienen der Überprüfung von ID-Tokens, die von den Client-SDKs stammen, und nicht der benutzerdefinierten Token, die Sie mit den Admin-SDKs erstellen. Weitere Informationen finden Sie unter Authentifizierungstoken.
<?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 ;
}
Die Überprüfung von Sitzungscookies ähnelt der Überprüfung von ID-Token.
Weitere Informationen finden Sie unter Sitzungscookies verwalten.
<?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 ;
}
Vom Generator und Verifier zurückgegebene Token sind Instanzen von KreaitFirebaseJWTContractToken
und stellen ein JWT dar. Die angezeigten Ausgaben sind Beispiele und variieren je nach den Informationen, die dem jeweiligen Benutzer in der Authentifizierungsdatenbank Ihres Projekts zugeordnet sind.
Gemäß der JWT-Spezifikation können Sie davon ausgehen, dass die folgenden Nutzlastfelder immer verfügbar sind: iss
, aud
, auth_time
, sub
, iat
, exp
. Andere Felder hängen von der Authentifizierungsmethode des angegebenen Kontos und den in der Auth-Datenbank Ihres Projekts gespeicherten Informationen ab.
$ 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...
Sie können benutzerdefinierte Token erstellen, die auf einen bestimmten Mandanten beschränkt sind:
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
Ebenso können Sie überprüfen, ob ID-Tokens im Rahmen eines bestimmten Mandanten ausgestellt wurden:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
Sitzungscookies unterstützen derzeit keine Mandanten.
Um ID-Tokens zu überprüfen, führt der Verifizierer einen Aufruf durch, um die aktuell verfügbaren öffentlichen Schlüssel von Firebase abzurufen. Die Schlüssel werden standardmäßig im Speicher zwischengespeichert.
Wenn Sie die öffentlichen Schlüssel effektiver zwischenspeichern möchten, können Sie den Prüfer mit einer Implementierung von psr/simple-cache oder psr/cache initialisieren, um die Anzahl der HTTP-Anfragen an die Server von Google zu reduzieren.
Hier ist ein Beispiel für die Verwendung der Symfony-Cache-Komponente:
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
Nur die neueste Version wird aktiv unterstützt.
Frühere Versionen erhalten Sicherheitsfixes, solange ihre niedrigste PHP-Anforderung Sicherheitsfixes erhält. Wenn eine Version beispielsweise PHP 7.4 und PHP 8.0 unterstützt, endet die Sicherheitsunterstützung, wenn die Sicherheitsunterstützung für PHP 7.4 endet.
Version | Erstveröffentlichung | Unterstützte PHP-Versionen | Status |
---|---|---|---|
5.x | 25. November 2023 | ~8.1.0, ~8.2.0, ~8.3.0 | Aktiv |
4.x | 26. November 2022 | ~8.1.0, ~8.2.0, ~8.3.0 | Sicherheitsunterstützung |
3.x | 25. April 2022 | ^7.4, ^8.0 | Ende des Lebens |
2.x | 03. Januar 2022 | ^7.4, ^8.0 | Ende des Lebens |
1.x | 06. Februar 2017 | >=5.5 | Ende des Lebens |
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.