コンテンツにスキップ

9-4 入室証を確かめる(JWT)

Plan: Free費用: 0円Wrangler 4.126.0公式ドキュメント取得日 2026-08-27
警備員のスタンプが本物かを、奥の担当者がもう一度確かめます。

前の節までで、部屋を届け出て、誰を入れるかの紙も書きました。これで窓口の警備員は仕事ができます。

けれど奥の担当者から見ると、目の前の人が本当に警備員を通ってきたのかは分かりません。裏口から回ってきた人かもしれないからです。

そこで警備員は、通した人の用件票にスタンプを押します。奥の担当者は、それが本物かを確かめてから応じます。

ここでは、スタンプの置き場所、本物かの確かめ方、宛先の確認、確かめる理由の順に見ます。

Learning goals

この節でできるようになること

  • 入室証がどこに付いてくるかを言える
  • 本物かどうかを確かめる材料の入手先を説明できる
  • 入室証がどの部屋あてかを確かめる意味を説明できる
  • 確かめが必要な理由を説明できる

1. 警備員が押すスタンプ(JWT)

Section titled “1. 警備員が押すスタンプ(JWT)”

窓口を通った人の用件票には、通した印のスタンプが押されます。スタンプの無い票は、窓口を通っていません。

Cloudflare では、この証を JWT(署名付きの短い証明書)として渡します。公式は、Cloudflare が要求を送るとき、その要求に Cf-Access-Jwt-Assertion という名前の欄で入室証を含めると説明しています。ブラウザから来た要求では、CF_Authorization という名前の小さな控えでも同じものが渡ります。

公式は、控えのほうは必ず渡るとは限らないため、欄のほうを確かめることを勧めています。

通した人の用件票には、警備員のスタンプが押されて奥へ進みます。

用件票の隅に、通過済みの印が押されています。

つまり、入室証は用件票に付いてくるので、奥の担当者は探しに行かなくて済みます。

2. 本物かどうかを確かめる(公開鍵)

Section titled “2. 本物かどうかを確かめる(公開鍵)”

スタンプは真似できます。だから見本と照らします。本部は見本を公開していて、誰でも取り寄せられます。

公式は、この見本にあたる公開鍵(署名を確かめるための材料)が、次の住所にあると説明しています。<your-team-name> の部分は、前の節で決めた組織の呼び名です。読めなくても大丈夫です。これは「見本の置き場」を指す住所です。

https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/certs

ここには鍵が二つ入っています。公式は、いま使われている鍵と切り替え前の古い鍵だと説明し、keys は両方を JWK 形式で、public_cert は現在の鍵を、public_certs は両方を PEM 形式で返すと述べています。

鍵は入れ替わります。公式は、既定で 6 週間ごとに入れ替わり、古い鍵も入れ替えから 7 日間は有効だと説明しています。そのため、鍵は書き写さず毎回取り寄せます。

スタンプは、本部が公開している見本と照らして確かめます。

用件票のスタンプを、本部が公開している見本帳と照らして確かめています。

つまり、確かめの材料は取り寄せるもので、埋め込むものではありません。

3. どの部屋あての入室証か(Application Audience)

Section titled “3. どの部屋あての入室証か(Application Audience)”

本物のスタンプでも、別の部屋の入室証なら通せません。スタンプには部屋の番号が入っています。

Cloudflare では、部屋ごとに固有の Application Audience(AUD)タグが付きます。公式は、入室証の中の aud という項目が、その証がどのアプリケーションで有効かを示すと説明しています。タグは次の経路で確認でき、部屋を作り直さない限り変わりません。

もう一つ確かめるのが発行元です。公式は、証の中の iss が自分の team domain(組織の住所)を指していることを確かめるよう述べています。発行元と宛先の両方が合って、はじめて自分あての証です。

スタンプには部屋の番号が入っていて、別の部屋の証は通しません。

番号が違えば、本物でも通しません。

つまり、確かめるのは「本物か」だけでなく「自分あてか」も含みます。

窓口を通った人だけが奥に来る、という前提が崩れることがあります。設定の行き違いで、裏口が開いたままになる場合です。

公式は、この検証によって、設定の誤りなどで Cloudflare Access を迂回してきた要求を拒否できると説明しています。確かめを入れておけば、迂回された場合でも奥は守られます。

これはマニュアル(Worker)で作られたページでも同じです。公式は、Cloudflare Access がその Worker の手前にある場合でも、Worker 側で入室証を確かめる必要があると明記しています。次は公式の例の要点で、読めなくても大丈夫です。「要求から証を取り出し、取り寄せた見本と照らし、発行元と宛先も合っているか調べる」という意味です。

const token = request.headers.get("cf-access-jwt-assertion");
const JWKS = createRemoteJWKSet(
new URL(`${env.TEAM_DOMAIN}/cdn-cgi/access/certs`),
);
const { payload } = await jwtVerify(token, JWKS, {
issuer: env.TEAM_DOMAIN,
audience: env.POLICY_AUD,
});

証が無いか、確かめに失敗した場合は、公式の例では 403(お断り)を返します。

スタンプを確かめると、窓口を通らずに来た用件を断れます。

裏口から来た人は、スタンプが無いので断られます。

つまり、確かめは「窓口を必ず通っている」という前提を、前提でなく事実にする作業です。

ここで紹介した確かめが、いま読んでいる Cloudflare Lab でどう使われるかを見ます。

Cloudflare Lab の管理ページは Worker が返す予定なので、Worker の中で入室証を確かめます。見本の置き場と AUD タグは設定値として持たせ、証が無い要求は 403 で断ります。実測は実装後に追記します。

  • 入室証は Cf-Access-Jwt-Assertion の欄で届き、ブラウザでは控えとしても届きます。
  • 本物かどうかは、公開されている鍵を取り寄せて確かめます(6 週間ごとに入れ替え)。
  • aud と発行元まで確かめると、迂回してきた要求を断れます。

この節で出てきた言葉を、つながりの順に並べると次のようになります。

図のラベル: 窓口を通した証 JWT / 要求に付いてくる Cf-Access-Jwt-Assertion / 見本を取り寄せる certs の置き場 / 署名が本物か調べる kid で照合 / 自分あてか調べる aud と発行元 / 合わなければ断る 403

次の章では、アカウントそのものを守ります。

この節のチェック

問 1Cloudflare が対象へ要求を送るとき、入室証はどこに入っていますか?

問 2公式が確かめに使うよう勧めているのはどちらですか?

問 3署名を確かめる公開鍵の扱いとして公式に沿うものはどれですか?

問 4入室証の中の aud が示すものはどれですか?

問 5対象の側で入室証を確かめる理由として公式に沿うものはどれですか?

最終更新日: