コンテンツにスキップ

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

Cloudflare Accessは、オリジンへのすべての認証済みリクエストにアプリケーショントークンを含めます。典型的なJWTは次のようになります:

eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzMzhhYmUxYmFmMmZlNDkyZjY0.eyJhdWQiOlsiOTdlMmFhZTEyMDEyMWY5MDJkZjhiYzk5ZmMzNDU5MTNh.zLYsHmLEginAQUXdygQo08gLTExWNXsN4jBc6PKdB

上記のように、JWTはドットで区切られた3つのBase64-URL値を含んでいます:

アプリケーションがCloudflare Tunnelを介してAccessに接続されていない限り、アプリケーションはオリジンのセキュリティを確保するためにトークンを検証する必要があります。ヘッダーのみの検証では不十分であり、JWTと署名を確認してアイデンティティの偽装を避ける必要があります。

ヘッダー

{
"alg": "RS256",
"kid": "9338abe1baf2fe492f646a736f25afbf7b025e35c627be4f60c414d4c73069b8",
"typ": "JWT"
}
  • alg はエンコーディングアルゴリズムを識別します。
  • kid はトークンに署名するために使用されるキーを識別します。
  • typ はトークンのフォーマットを指定します。

ペイロード

ペイロードには、アプリケーションに渡す実際のクレームとユーザー情報が含まれています。ペイロードの内容は、アイデンティティプロバイダーを使用してアプリケーションに認証したか、サービストークンを使用したかによって異なります。

アイデンティティベースの認証

{
"aud": ["32eafc7626e974616deaf0dc3ce63d7bcbed58a2731e84d06bc3cdf1b53c4228"],
"email": "user@example.com",
"exp": 1659474457,
"iat": 1659474397,
"nbf": 1659474397,
"iss": "https://yourteam.cloudflareaccess.com",
"type": "app",
"identity_nonce": "6ei69kawdKzMIAPF",
"sub": "7335d417-61da-459d-899c-0a01c76a2f94",
"country": "US"
}
フィールド説明
audAccessアプリケーションのアプリケーションオーディエンスタグ (AUD)
emailアイデンティティプロバイダーによって確認された認証済みユーザーのメールアドレス。
expトークンの有効期限のタイムスタンプ(Unix時間)。
iatトークンの発行タイムスタンプ(Unix時間)。
nbfトークンの使用前タイムスタンプ(Unix時間)、トークンが使用される前に受信されたかどうかを確認するために使用されます。
issアプリケーションのCloudflare AccessドメインURL。
typeAccessトークンのタイプ(アプリケーショントークンの場合はapp、グローバルセッショントークンの場合はorg)。
identity_nonceユーザーのアイデンティティを取得するために使用されるキャッシュキー。
subユーザーのID。この値はアカウントごとにメールアドレスに固有です。ユーザーが削除され、Zero Trust組織に再追加されるか、異なる組織にログインすると、異なるsubが与えられます。
countryユーザーが認証した国。

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

Accessは、アイデンティティプロバイダーがサポートしている場合、JWTにカスタムSAML属性とOIDCクレームを追加することを許可します。これは、SAMLまたはOIDCプロバイダーを設定する際に構成されます。

ユーザーアイデンティティ

ユーザーアイデンティティは、アプリケーションの権限を確認するのに役立ちます。たとえば、アプリケーションは、特定のユーザーがFinance-TeamのようなOktaまたはAzureADグループのメンバーであることを検証できます。

クッキーサイズの制限と帯域幅の考慮により、アプリケーショントークンにはユーザーのアイデンティティのサブセットのみが含まれます。ユーザーの完全なアイデンティティを取得するには、CF_Authorizationクッキーをhttps://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/get-identityに送信します。リクエストは次のように構成する必要があります:

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

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

フィールド説明
emailユーザーのメールアドレス。
idpアイデンティティプロバイダーからのデータ。
geoユーザーが認証した国。
user_uuidユーザーのID。
devicePostureデバイスポスチャ属性。
account_id組織のアカウントID。
iatユーザーがログインした時刻を示すタイムスタンプ。
ipユーザーのIPアドレス。
auth_statusmTLSで認証している場合のステータス。
common_namemTLSクライアント証明書のコモンネーム。
service_token_id認証に使用されたサービストークンのクライアントID。
service_token_statusIdPではなくサービストークンを介して認証された場合はTrue。
is_warpユーザーがWARPを有効にした場合はTrue。
is_gatewayユーザーがWARPを有効にし、Zero Trustチームに認証された場合はTrue。
gateway_account_idZero Trustチームに認証されたときにWARPクライアントによって生成されたID。
device_id認証に使用されたデバイスのID。
versionget-identityオブジェクトのバージョン。
device_sessionsユーザーによって開始されたすべてのセッションのリスト。

サービストークン認証

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

署名

Cloudflareは、エンコードされたヘッダーとペイロードにSHA-256アルゴリズム(RS256)を使用して署名することによって署名を生成します。RS256では、プライベートキーがJWTに署名し、別の公開キーが署名を検証します。

JWTに関する詳細は、jwt.ioを参照してください。