Closed3

Firebase AuthのidTokenをPHPでも検証したい

Yusuke KawabataYusuke Kawabata

PHPでfirebaseを利用するとき、FirestoreのSDKは公式で用意されているのですが、Firebase AuthのSDKが標準では用意されていません。たとえば匿名認証をかませてクライアントでFirestoreに/user/{userId}/documents/{doc}のようなパスに書き込んだとします。

それに基づいでサーバ側でちょっと重い処理をしようとすると、できれば安全に認証データをもらってその人のデータかどうか確認しなければいけません。Authの公式SDKがないため、いままではサードパーティのライブラリを利用する場合が多かったのですが、検証だけならもっと軽い方法がありました。

Yusuke KawabataYusuke Kawabata

それは公式のGoogle Auth Library for PHPを使うことです。

https://github.com/googleapis/google-auth-library-php

基本的にはApplication Default CredentialsやIdentity Aware Proxyなどのために用意されてるのですが、ついでにJwtの検証もできます。

インストールは以下の通り。phpseclibも追加で必要になります。

$ composer require google/auth phpseclib/phpseclib
Yusuke KawabataYusuke Kawabata

そのままでは使えないので、Firebase Auth用にカスタマイズします。

こちらのサードパーティツールでの検証を参考に、/x509/ではなく/jwt/をセットします。

https://firebase.google.com/docs/auth/admin/verify-id-tokens?hl=ja#node.js

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にクローズされました