Una biblioteca para trabajar con tokens de Google Firebase. Puede usarlo para crear tokens personalizados y verificar tokens de identificación.
Logre más con Firebase Admin SDK para PHP (que utiliza esta biblioteca).
Lea sobre el futuro del SDK PHP de Firebase Admin en el repositorio GitHub del SDK.
composer require kreait/firebase-tokens
Puede encontrar más información sobre qué es un token personalizado y cómo se puede utilizar en la documentación oficial de 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...
Los métodos de verificación de tokens de ID incluidos en los SDK de administrador de Firebase están destinados a verificar los tokens de ID que provienen de los SDK del cliente, no los tokens personalizados que crea con los SDK de administrador. Consulte Tokens de autenticación para obtener más información.
<?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 ;
}
La verificación de cookies de sesión es similar a la verificación de token de identificación.
Consulte Administrar cookies de sesión para obtener más información.
<?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 ;
}
Los tokens devueltos por el Generador y el Verificador son instancias de KreaitFirebaseJWTContractToken
y representan un JWT. Los resultados mostrados son ejemplos y varían según la información asociada con el usuario determinado en la base de datos de autenticación de su proyecto.
Según la especificación JWT, puede esperar que los siguientes campos de carga útil estén siempre disponibles: iss
, aud
, auth_time
, sub
, iat
, exp
. Otros campos dependen del método de autenticación de la cuenta determinada y de la información almacenada en la base de datos de autenticación de su proyecto.
$ 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...
Puede crear tokens personalizados que tengan como ámbito un inquilino determinado:
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
De manera similar, puede verificar que los tokens de identificación se emitieron en el ámbito de un inquilino determinado:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
Actualmente, las cookies de sesión no admiten inquilinos.
Para verificar los tokens de identificación, el verificador realiza una llamada para recuperar las claves públicas actualmente disponibles de Firebase. Las claves se almacenan en caché en la memoria de forma predeterminada.
Si desea almacenar en caché las claves públicas de manera más efectiva, puede inicializar el verificador con una implementación de psr/simple-cache o psr/cache para reducir la cantidad de solicitudes HTTP a los servidores de Google.
Aquí hay un ejemplo usando el componente de caché de Symfony:
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
Sólo se admite activamente la última versión.
Las versiones anteriores recibirán correcciones de seguridad siempre que su requisito PHP más bajo reciba correcciones de seguridad. Por ejemplo, cuando una versión admite PHP 7.4 y PHP 8.0, el soporte de seguridad finalizará cuando finalice el soporte de seguridad para PHP 7.4.
Versión | Lanzamiento inicial | Versiones PHP soportadas | Estado |
---|---|---|---|
5.x | 25 de noviembre de 2023 | ~8.1.0, ~8.2.0, ~8.3.0 | Activo |
4.x | 26 de noviembre de 2022 | ~8.1.0, ~8.2.0, ~8.3.0 | Soporte de seguridad |
3.x | 25 de abril de 2022 | ^7.4, ^8.0 | Fin de la vida |
2.x | 03 de enero de 2022 | ^7.4, ^8.0 | Fin de la vida |
1.x | 06 de febrero de 2017 | >=5.5 | Fin de la vida |
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.