Библиотека для работы с токенами Google Firebase. Вы можете использовать его для создания пользовательских токенов и проверки токенов идентификатора.
Достигайте большего с помощью Firebase Admin SDK для PHP (который использует эту библиотеку).
Пожалуйста, прочитайте о будущем Firebase Admin PHP SDK в репозитории SDK на GitHub.
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...
Методы проверки токена идентификатора, включенные в SDK администратора Firebase, предназначены для проверки токенов идентификатора, которые поступают из клиентских SDK, а не пользовательских токенов, которые вы создаете с помощью SDK администратора. Дополнительные сведения см. в разделе Токены аутентификации.
<?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 ;
}
Проверка сеансовых файлов cookie аналогична проверке идентификатора токена.
Дополнительную информацию см. в разделе «Управление сеансовыми файлами cookie».
<?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 ;
}
Токены, возвращаемые генератором и верификатором, являются экземплярами 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 ' );
Аналогичным образом вы можете проверить, что токены идентификатора были выпущены в рамках данного клиента:
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
Сеансовые файлы cookie в настоящее время не поддерживают клиентов.
Чтобы проверить токены идентификатора, верификатор выполняет вызов для получения доступных в настоящее время открытых ключей Firebase. По умолчанию ключи кэшируются в памяти.
Если вы хотите более эффективно кэшировать открытые ключи, вы можете инициализировать верификатор с помощью реализации psr/simple-cache или psr/cache, чтобы уменьшить количество HTTP-запросов к серверам Google.
Вот пример использования компонента Symfony Cache:
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 | 25 ноября 2023 г. | ~8.1.0, ~8.2.0, ~8.3.0 | Активный |
4.x | 26 ноября 2022 г. | ~8.1.0, ~8.2.0, ~8.3.0 | Поддержка безопасности |
3.x | 25 апреля 2022 г. | ^7.4, ^8.0 | Конец жизни |
2.x | 03 января 2022 г. | ^7.4, ^8.0 | Конец жизни |
1.x | 06 февраля 2017 г. | >=5.5 | Конец жизни |
Лицензия MIT (MIT). Пожалуйста, смотрите файл лицензии для получения дополнительной информации.