Skip to content

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

OAuth クライアントを作成する

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

前提条件

OAuth クライアントを作成するには、対象アカウントで次のいずれかのロールが必要です。Super Administrator、Administrator、または OAuth Client Write。

  1. Cloudflare ダッシュボードにログインします。
  2. アカウントを選択します。
  3. Manage Account > OAuth clients を開きます。
  4. Create client を選択します。
  5. 必須の設定項目を入力します。
    • Client name
    • Response type
    • Grant type
    • Token authentication method
    • Redirect URLs
  6. 任意: 必須ではないフィールドを追加します。
  7. Continue を選択し、クライアントに必要なスコープを定義します。
  8. 任意: Choose optional scopes で、任意にしたい各スコープの Required をオフにします。デフォルトではすべてのスコープが必須です。
  9. Create client を選択します。
  10. Client IDClient Secret を安全な場所に保存します。
OAuth clients を開く ↗

Cloudflare API で OAuth クライアントを作成するには、OAuth Clients Write 権限付きの API トークンを作成します。

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{
		"client_name": "Cloudflare OAuth Client",
		"grant_types": ["authorization_code"],
		"redirect_uris": ["https://example.com/oauth/callback"],
		"scopes": ["workers-platform.read", "workers-platform.write"],
		"optional_scopes": ["workers-platform.read"],
		"post_logout_redirect_uris": ["https://example.com/logout"],
		"response_types": ["code"],
		"token_endpoint_auth_method": "client_secret_basic",
		"logo_uri": "https://example.com/logo.png",
		"policy_uri": "https://example.com/policy",
		"tos_uri": "https://example.com/tos",
		"client_uri": "https://example.com",
		"allowed_cors_origins": ["https://example.com"]
	}'

スコープを選択する

OAuth のスコープ名は、Cloudflare API トークンの権限名に対応します。クライアントに必要な権限は、Cloudflare API のドキュメントで確認します。

OAuth クライアントの作成時または編集時に、スコープを少なくとも 1 つ選択します。選択したスコープは、デフォルトではすべて必須です。

Choose optional scopes で、任意にしたい各スコープの Required をオフにします。

必須スコープは同意画面で必ず付与されます。任意スコープはユーザーが拒否できます。

利用可能なスコープを API から取得します。API でクライアントを作成するときは、スコープ ID を使います。

curl "https://api.cloudflare.com/client/v4/oauth/scopes" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

スコープを任意にするには、リクエストの optional_scopes に含めます。これはクライアントの scopes のサブセットである必要があります。任意スコープは、認可時にユーザーが拒否できます。

サポートする OAuth フロー

Cloudflare の OAuth クライアントは、OAuth 2.0 の Authorization Code フローをサポートします。

サードパーティクライアント向けに、Client Credentials、Implicit、Resource Owner Password Credentials、Device Authorization、その他の OAuth グラントタイプはサポートしていません。

フローを選ぶ

OAuth フローは次の指針で選びます。

クライアントの種類 フロー Token endpoint の認証 PKCE
サーバーサイドの Web アプリまたはバックエンドサービス クライアントシークレット付きの Authorization Code client_secret_basic または client_secret_post 任意 / 不要
ブラウザー、モバイル、デスクトップ、または CLI アプリ PKCE 付きの Authorization Code none 必須、S256

クライアントシークレット

Authorization Code フローは、クライアントシークレットを露出から守れる、安全なサーバーサイドアプリケーション向けです。

  • 使う場面: OAuth クライアントがサーバーサイドの Web アプリケーションまたはバックエンドサービスのとき。
  • 仕組み: クライアントがユーザーを認可ページへリダイレクトします。認可後、Cloudflare は認可コードをバックエンドへ返します。バックエンドはコードとクライアントシークレットをアクセストークンと交換します。
  • セキュリティ上の注意: クライアントシークレットをクライアントサイドのコードに露出したり、モバイルクライアントのバイナリへ埋め込んだりしないでください。

PKCE

Proof Key for Code Exchange (PKCE) は、クライアントシークレットを安全に保存できないパブリッククライアント(モバイルやシングルページアプリなど)向けに、Authorization Code フローを拡張します。

  • 使う場面: OAuth クライアントがシングルページ、モバイル、デスクトップ、または CLI アプリケーションのとき。
  • 仕組み: 静的なクライアントシークレットの代わりに、ログイン要求ごとに一意の code verifier と code challenge を生成します。
  • セキュリティ上の注意: PKCE を使うクライアントには、クライアントシークレットは不要です。

プライベートクライアントとパブリッククライアント

新しい OAuth クライアントの可視性は、デフォルトでプライベートです。プライベートクライアントは、親の Cloudflare アカウントのメンバーだけが認可できます。パブリッククライアントは、任意の Cloudflare ユーザーからの認可を許可します。

クライアントをパブリックにする前に、必要な操作を完了し、必須フィールドを入力します。

必須フィールド

  • Client name
  • Logo
  • Client URL
  • Scopes

必要な操作

OAuth クライアントをパブリックにする前に、クライアント URL の ドメイン検証 を完了する必要があります。

クライアントをパブリックにする

  1. Manage Account > OAuth clients を開きます。
  2. クライアントのアクションメニューを開きます。
  3. Change Visibility を選択します。
OAuth clients を開く ↗
curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{ "visibility": "public" }'

Client URL のドメイン所有権検証

クライアントをパブリックにする前に、Cloudflare は Client URL のドメイン所有権検証を要求します。クライアントがアカウントメンバー専用のプライベート利用だけなら、ドメイン所有権の検証は不要です。

検証コードをコピーし、その値で DNS 設定に TXT レコードを作成します。レコードには、cloudflare_oauth_client_publisher= プレフィックスを含むすべてのテキストが必要です。

Cloudflare はこの DNS レコードを、見つかるまで、または 2 日後にリクエストがタイムアウトするまでポーリングします。

検証を再開する

検証がタイムアウトした場合は、クライアントのアクションメニューで Restart verification を選択します。

失敗した検証またはタイムアウトした検証を再開するには、既存の client_uri を変えずに PATCH リクエストを送ります。

curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN" \
	-d '{ "client_uri": "https://example.com" }'

クライアントシークレットをローテーションする

各クライアントはシークレットを 2 つ持てます。新しいシークレットを作成し、クライアントを新しいシークレットへ切り替え、古いシークレットを削除できます。

  1. Manage Account > OAuth clients を開きます。
  2. クライアントのアクションメニューを開きます。
  3. Rotate client secret を選択します。
  4. 新しいシークレットを安全な場所に保存します。
  5. クライアントが新しいシークレットを使うようになったら、古いシークレットを削除します。
OAuth clients を開く ↗

クライアントがシークレットのローテーション中かどうかは、GET レスポンスの has_rotated_secret で確認します。値が true の場合は、別のシークレットを作成する前に古いシークレットを削除します。

新しいシークレットを作成する

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID/rotate_secret" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

古いシークレットを削除する

curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/oauth_clients/$CLIENT_ID/rotate_secret" \
	-H "Content-Type: application/json" \
	-H "Authorization: Bearer $API_TOKEN"

役に立ちましたか?