Uma biblioteca para trabalhar com tokens do Google Firebase. Você pode usá-lo para criar tokens personalizados e verificar tokens de ID.
Obtenha mais com o SDK Admin do Firebase para PHP (que usa esta biblioteca).
Leia sobre o futuro do Firebase Admin PHP SDK no repositório GitHub do SDK.
composer require kreait/firebase-tokens
Mais informações sobre o que é um token personalizado e como ele pode ser usado podem ser encontradas na documentação oficial do 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...
Os métodos de verificação de token de ID incluídos nos SDKs Admin do Firebase destinam-se a verificar os tokens de ID provenientes dos SDKs clientes, e não os tokens personalizados criados com os SDKs Admin. Consulte Tokens de autenticação para obter mais informações.
<?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 ;
}
A verificação do cookie de sessão é semelhante à verificação do token de ID.
Consulte Gerenciar cookies de sessão para obter mais informações.
<?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 ;
}
Os tokens retornados do Gerador e do Verificador são instâncias de KreaitFirebaseJWTContractToken
e representam um JWT. As saídas exibidas são exemplos e variam dependendo das informações associadas ao usuário específico no banco de dados de autenticação do seu projeto.
De acordo com a especificação JWT, você pode esperar que os seguintes campos de carga útil estejam sempre disponíveis: iss
, aud
, auth_time
, sub
, iat
, exp
. Outros campos dependem do método de autenticação da conta fornecida e das informações armazenadas no banco de dados Auth do seu projeto.
$ 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...
Você pode criar tokens personalizados com escopo para um determinado locatário:
<?php
use Kreait Firebase JWT CustomTokenGenerator ;
$ generator = CustomTokenGenerator:: withClientEmailAndPrivateKey ( ' ... ' , ' ... ' );
$ tenantAwareGenerator = $ generator -> withTenantId ( ' my-tenant-id ' );
Da mesma forma, você pode verificar se os tokens de ID foram emitidos no escopo de um determinado locatário:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
Atualmente, os cookies de sessão não suportam inquilinos.
Para verificar os tokens de ID, o verificador faz uma chamada para buscar as chaves públicas atualmente disponíveis do Firebase. As chaves são armazenadas em cache na memória por padrão.
Se quiser armazenar em cache as chaves públicas de forma mais eficaz, você pode inicializar o verificador com uma implementação de psr/simple-cache ou psr/cache para reduzir a quantidade de solicitações HTTP aos servidores do Google.
Aqui está um exemplo usando o componente Symfony Cache:
use Kreait Firebase JWT IdTokenVerifier ;
use Symfony Component Cache Adapter FilesystemAdapter ;
$ cache = new FilesystemAdapter ();
$ verifier = IdTokenVerifier:: createWithProjectIdAndCache ( $ projectId , $ cache );
Apenas a versão mais recente tem suporte ativo.
Versões anteriores receberão correções de segurança, desde que o requisito de PHP mais baixo receba correções de segurança. Por exemplo, quando uma versão suporta PHP 7.4 e PHP 8.0, o suporte de segurança terminará quando o suporte de segurança para PHP 7.4 terminar.
Versão | Lançamento Inicial | Versões PHP suportadas | Status |
---|---|---|---|
5.x | 25 de novembro de 2023 | ~8.1.0, ~8.2.0, ~8.3.0 | Ativo |
4.x | 26 de novembro de 2022 | ~8.1.0, ~8.2.0, ~8.3.0 | Suporte de segurança |
3.x | 25 de abril de 2022 | ^7.4, ^8.0 | Fim da vida |
2.x | 03 de janeiro de 2022 | ^7.4, ^8.0 | Fim da vida |
1.x | 06 de fevereiro de 2017 | >=5.5 | Fim da vida |
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.