Google Firebase トークンを操作するためのライブラリ。これを使用して、カスタム トークンを作成し、ID トークンを検証できます。
Firebase Admin SDK for 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...
Firebase Admin SDK に含まれる ID トークン検証メソッドは、Admin SDK で作成したカスタム トークンではなく、クライアント SDK から取得される ID トークンを検証することを目的としています。詳細については、「認証トークン」を参照してください。
<?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 の検証は ID トークンの検証に似ています。
詳細については、「セッション 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 ;
}
Generator と Verifier から返されるトークンは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 ' );
同様に、ID トークンが特定のテナントのスコープ内で発行されたことを確認できます。
<?php
use Kreait Firebase JWT IdTokenVerifier ;
$ verifier = IdTokenVerifier:: createWithProjectId ( ' my-project-id ' );
$ tenantAwareVerifier = $ verifier -> withExpectedTenantId ( ' my-tenant-id ' );
現在、セッション Cookie はテナントをサポートしていません。
ID トークンを検証するために、検証者は呼び出しを行って Firebase の現在利用可能な公開鍵を取得します。キーはデフォルトでメモリにキャッシュされます。
公開鍵をより効果的にキャッシュしたい場合は、psr/simple-cache または psr/cache の実装を使用してベリファイアを初期化し、Google サーバーへの HTTP リクエストの量を減らすことができます。
Symfony キャッシュ コンポーネントを使用した例を次に示します。
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 | 2023 年 11 月 25 日 | ~8.1.0, ~8.2.0, ~8.3.0 | アクティブ |
4.x | 2022 年 11 月 26 日 | ~8.1.0, ~8.2.0, ~8.3.0 | セキュリティサポート |
3.x | 2022 年 4 月 25 日 | ^7.4, ^8.0 | 人生の終わり |
2.x | 2022 年 1 月 3 日 | ^7.4, ^8.0 | 人生の終わり |
1.x | 2017 年 2 月 6 日 | >=5.5 | 人生の終わり |
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。