Cloudflare Access applicationを再作成するとaudが変わる
Cloudflare Accessで保護したアプリのAccess applicationを削除→再作成すると、JWTのaud(Audience Tag)が新しい値に変わる。Worker側でaudを検証している場合、環境変数を更新しないと全APIが401になる。
症状がわかりにくいのがハマりポイント。Cloudflare Accessのログイン自体は成功するので「認証は通っている」ように見えるが、Worker側のJWT検証でaud不一致になりAPIが全滅する。フロントエンドは「session expired」的な表示になるため、Access側の問題だと気づきにくい。
// Worker側のJWT検証コード(簡略化)
const payload = await verify(jwt, publicKey);
if (payload.aud !== env.ACCESS_AUD) {
// Access applicationを再作成すると、ここで落ちる
return new Response('Unauthorized', { status: 401 });
}
調査の勘所:
- ブラウザでAccess認証は通るのにAPIが401 →
audの不一致を疑う curl -vでレスポンスヘッダを確認し、Access自体は通過していることを確認する- JWTをデコードして
audの値を現在のAccess applicationのAudience Tagと突き合わせる
ポイント:
- Access applicationを再作成・置換したら、Worker側の
ACCESS_AUD環境変数を必ず更新する - IaCで管理しているなら、applicationリソースの
aud出力をWorker設定に自動連携しておくと安全