これで何ができる?

Github

ここでは、Githubのコードの要旨のみを抽出。

https://github.com/masa0902dev/jwt-test-with-firebase-and-actions

環境

言語:TS

インフラ:Cloud Functions for firebase, Cloud Firestore (for firebase)

バージョンなど:

arm64 (M2 mac air)
"firebase-tools": "13.29.2"

"firebase": "^11.1.0",
"typescript": "^5.7.3",

"express": "^4.21.2",
"firebase-admin": "^12.6.0",
"firebase-functions": "^6.0.1",
"jsonwebtoken": "^9.0.2",
"node-jose": "^2.2.0"

概要

動作フロー

  1. Actions
    1. OIDCトークンを取得(JWTなので<header>.<payload>.<signature>の形式)
    2. jsファイルにトークンを渡す
    3. jsファイル内でAuthorizationヘッダにBearerでトークンをつけて、 Functions上のAPIを叩く
  2. firebase Functions
    1. Github OIDC用の公開鍵のデータを返すAPIにアクセスして、公開鍵として使用するデータ(複数ある)を取得
    2. 上記で取得したデータのうち、Actionsからのリクエストのkidと同じkidを持つデータを選択
    3. そのデータを元にPEM形式の公開鍵を生成
    4. Actionsからのトークン・上記の公開鍵を用いてJWTを検証
    5. 検証に成功すれば、JWTのpayloadを取得する
    6. (ついでに、実行元が指定されたユーザor組織のレポジトリであることを検証)
    7. API EPの処理を実行

JWS (JWTを使った認証) で設定する値