Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

アプリケーショントークン

最終更新 Markdown で表示Agent セットアップ

Cloudflare Access は、認証済みのリクエストすべてにアプリケーショントークンを付けてオリジンへ送ります。典型的な JWT は次のとおりです。

eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzMzhhYmUxYmFmMmZlNDkyZjY0.eyJhdWQiOlsiOTdlMmFhZ TEyMDEyMWY5MDJkZjhiYzk5ZmMzNDU5MTNh.zLYsHmLEginAQUXdygQo08gLTExWNXsN4jBc6PKdB

上記のとおり、JWT はドットで区切られた 3 つの Base64-URL 値で構成されます。

アプリケーションが Cloudflare Tunnel 経由で Access に接続されていない場合は、オリジンのセキュリティを確保するために トークンを検証 する必要があります。ヘッダーだけの検証では不十分です。なりすましを防ぐには、JWT と署名の両方を確認します。

ヘッダー

{
	"alg": "RS256",
	"kid": "9338abe1baf2fe492f646a736f25afbf7b025e35c627be4f60c414d4c73069b8",
	"typ": "JWT"
}
  • alg はエンコードアルゴリズムを示します。
  • kid はトークンの署名に使った鍵を示します。
  • typ はトークン形式を示します。

ペイロード

ペイロードには、アプリケーションへ渡す実際のクレームとユーザー情報が入ります。内容は、ID プロバイダーで認証したか、サービストークン で認証したかによって変わります。

ID ベースの認証

{
	"aud": ["32eafc7626e974616deaf0dc3ce63d7bcbed58a2731e84d06bc3cdf1b53c4228"],
	"email": "[email protected]",
	"exp": 1659474457,
	"iat": 1659474397,
	"nbf": 1659474397,
	"iss": "https://yourteam.cloudflareaccess.com",
	"type": "app",
	"identity_nonce": "6ei69kawdKzMIAPF",
	"sub": "7335d417-61da-459d-899c-0a01c76a2f94",
	"country": "US"
}
フィールド 説明
aud Access アプリケーションの アプリケーション audience(AUD)タグ です。
email 認証済みユーザーのメールアドレスです。ID プロバイダーが検証します。
exp トークンの有効期限タイムスタンプです(Unix 時間)。
iat トークンの発行タイムスタンプです(Unix 時間)。
nbf トークンの not-before タイムスタンプです(Unix 時間)。この時刻より前にトークンを受け取っていないかを確認します。
iss アプリケーションの Cloudflare Access ドメイン URL です。
type Access トークンの種類です(アプリケーショントークンは app、グローバルセッショントークンは org)。
identity_nonce ユーザー ID を取得するためのキャッシュキーです。
sub ユーザーの ID です。アカウント内のメールアドレスごとに一意です。Zero Trust 組織から 削除 して再追加した場合や、別の組織にログインした場合は、別の sub になります。
country ユーザーが認証した国です。

カスタム SAML 属性と OIDC クレーム

Access では、ID プロバイダーが対応している場合、検証を強化するためにカスタム SAML 属性と OIDC クレームを JWT に追加できます。設定は SAML または OIDC プロバイダーのセットアップ時に行います。ID プロバイダーのグループがトークンに含まれるのは、groups をカスタム SAML 属性または OIDC クレームとして明示的に設定した場合だけです。Access が自動で追加することはありません。

ユーザー ID

ユーザー ID は、アプリケーションの権限確認に役立ちます。たとえば、あるユーザーが Finance-Team のような Okta または Microsoft Entra ID のグループに所属しているかを検証できます。

Cookie サイズ制限と帯域の都合で、アプリケーショントークンにはユーザー ID の一部だけが入ります。完全な ID を取得するには、CF_Authorization Cookie を https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/get-identity に送ります。リクエストは次の形にします。

curl -H 'cookie: CF_Authorization=<user-token>' https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/get-identity

Access は、次のデータを含む JSON を返します。

フィールド 説明
email ユーザーのメールアドレスです。
idp ID プロバイダーからのデータです。
geo ユーザーが認証した国です。
user_uuid ユーザーの ID です。
devicePosture デバイスポスチャの属性です。
account_id 組織のアカウント ID です。
iat ユーザーがログインした時刻のタイムスタンプです。
ip ユーザーの IP アドレスです。
auth_status mTLS で認証している場合のステータスです。
common_name mTLS クライアント証明書の Common Name です。
service_token_id 認証に使ったサービストークンの Client ID です。
service_token_status ID プロバイダーではなくサービストークンで認証した場合は True です。
is_warp ユーザーが WARP を有効にしている場合は True です。
is_gateway ユーザーが Cloudflare One Client を有効にし、Zero Trust チームで認証している場合は True です。
gateway_account_id Cloudflare One Client が Zero Trust チームで認証したときに生成する ID です。
device_id 認証に使ったデバイスの ID です。
version get-identity オブジェクトのバージョンです。
device_sessions ユーザーが開始したセッションの一覧です。

サービストークン認証

{
	"type": "app",
	"aud": ["32eafc7626e974616deaf0dc3ce63d7bcbed58a2731e84d06bc3cdf1b53c4228"],
	"exp": 1659474457,
	"iss": "https://yourteam.cloudflareaccess.com",
	"common_name": "e367826f93b8d71185e03fe518aff3b4.access",
	"iat": 1659474397,
	"sub": ""
}
フィールド 説明
type Access トークンの種類です(アプリケーショントークンは app、グローバルセッショントークンは org)。
aud Access アプリケーションの アプリケーション audience(AUD)タグ です。
exp JWT の有効期限タイムスタンプです(Unix 時間)。
iss アプリケーションの Cloudflare Access ドメイン URL です。
common_name サービストークンの Client ID(CF-Access-Client-Id)です。
iat JWT の発行タイムスタンプです(Unix 時間)。
sub サービストークンで認証した場合は空文字列です。

署名

Cloudflare は、エンコードしたヘッダーとペイロードを SHA-256 アルゴリズム(RS256)で署名して署名値を生成します。RS256 では、秘密鍵が JWT に署名し、別の 公開鍵 が署名を検証します。

JWT の詳細は jwt.io を参照してください。

役に立ちましたか?