Closed3
Firebase AuthのidTokenをPHPでも検証したい
PHPでfirebaseを利用するとき、FirestoreのSDKは公式で用意されているのですが、Firebase AuthのSDKが標準では用意されていません。たとえば匿名認証をかませてクライアントでFirestoreに/user/{userId}/documents/{doc}のようなパスに書き込んだとします。
それに基づいでサーバ側でちょっと重い処理をしようとすると、できれば安全に認証データをもらってその人のデータかどうか確認しなければいけません。Authの公式SDKがないため、いままではサードパーティのライブラリを利用する場合が多かったのですが、検証だけならもっと軽い方法がありました。
それは公式のGoogle Auth Library for PHPを使うことです。
基本的にはApplication Default CredentialsやIdentity Aware Proxyなどのために用意されてるのですが、ついでにJwtの検証もできます。
インストールは以下の通り。phpseclibも追加で必要になります。
$ composer require google/auth phpseclib/phpseclib
そのままでは使えないので、Firebase Auth用にカスタマイズします。
こちらのサードパーティツールでの検証を参考に、/x509/ではなく/jwt/をセットします。
use Google\Auth\AccessToken;
$project = "YOUR_PROJECT_ID";
$auth = new AccessToken();
$payload = $auth->verify($idToken, [
'certsLocation' => "https://www.googleapis.com/robot/v1/metadata/jwk/securetoken@system.gserviceaccount.com",
'issuer' => 'https://securetoken.google.com/'.$project,
]);
var_dump($payload);
こんな感じで検証し、失敗すればfalse、成功すればJwtの中身がデコードされて連想配列でわたされます。
このスクラップは2024/03/10にクローズされました