--- title: OAuth icon: key description: PKCE を用いた認可コードフロー、およびサーバー間アクセス向けのクライアントクレデンシャル。 --- Twenty は、ユーザー向けアプリでは認可コード + PKCE、サーバー間アクセスではクライアントクレデンシャルを用いた OAuth 2.0 を実装しています。 クライアントは [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) に従って動的に登録され、ダッシュボードでの手動セットアップは不要です。 ## OAuth を使用するタイミング | シナリオ | 認証方法 | | ---------------------- | ---------------------------------------------------------------- | | 社内向けスクリプト、自動化 | [API キー](/l/ja/developers/extend/api#authentication) | | ユーザーの代理として動作する外部アプリ | **OAuth — 認可コード** | | サーバー間、ユーザーコンテキストなし | **OAuth — クライアントクレデンシャル** | | UI 拡張機能を備えた Twenty アプリ | [アプリ](/l/ja/developers/extend/apps/getting-started)(OAuth は自動で処理されます) | ## クライアントを登録 Twenty は [RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591) に準拠した**動的クライアント登録**をサポートします。 手動セットアップは不要—プログラムで登録します: ```bash POST /oauth/register Content-Type: application/json { "client_name": "My Integration", "redirect_uris": ["https://myapp.com/callback"], "grant_types": ["authorization_code"], "token_endpoint_auth_method": "client_secret_post" } ``` **レスポンス:** ```json { "client_id": "abc123", "client_secret": "secret456", "client_name": "My Integration", "redirect_uris": ["https://myapp.com/callback"] } ``` `client_secret` は安全に保管してください—後から再取得することはできません。 ## スコープ | スコープ | アクセス | | --------- | ---------------------------------------- | | `api` | Core および Metadata API への読み取り/書き込みのフルアクセス | | `profile` | 認証済みユーザーのプロフィール情報を読み取る | スコープはスペース区切りの文字列で指定します: `scope=api profile` ## 認可コードフロー アプリが Twenty ユーザーの代理として動作する場合にこのフローを使用します。 ### 1. ユーザーを認可にリダイレクト ``` GET /oauth/authorize? client_id=YOUR_CLIENT_ID& response_type=code& redirect_uri=https://myapp.com/callback& scope=api& state=random_state_value& code_challenge=CHALLENGE& code_challenge_method=S256 ``` | パラメーター | 必須 | 説明 | | ----------------------- | --- | ------------------------------------------------- | | `client_id` | はい | 登録済みのクライアント ID | | `response_type` | はい | `code` である必要があります | | `redirect_uri` | はい | 登録済みのリダイレクト URI と一致している必要があります | | `scope` | いいえ | スペース区切りのスコープ(既定は `api`) | | `state` | 推奨 | CSRF 攻撃を防ぐためのランダムな文字列 | | `code_challenge` | 推奨 | PKCE チャレンジ(ベリファイアの SHA-256 ハッシュを base64url エンコード) | | `code_challenge_method` | 推奨 | PKCE 使用時は `S256` である必要があります | ユーザーに同意画面が表示され、アクセスを許可または拒否します。 ### 2. コールバックを処理 認可後、Twenty はあなたの `redirect_uri` にリダイレクトします: ``` https://myapp.com/callback?code=AUTH_CODE&state=random_state_value ``` `state` が送信した値と一致することを確認します。 ### 3. コードをトークンに交換 ```bash POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code& code=AUTH_CODE& redirect_uri=https://myapp.com/callback& client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET& code_verifier=YOUR_PKCE_VERIFIER ``` **レスポンス:** ```json { "access_token": "eyJhbG...", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "dGhpcyBpcyBh..." } ``` ### 4. アクセストークンを使用 ```bash GET /rest/companies Authorization: Bearer ACCESS_TOKEN ``` ### 5. 期限切れ時にリフレッシュ ```bash POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=refresh_token& refresh_token=YOUR_REFRESH_TOKEN& client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET ``` ## クライアントクレデンシャルフロー ユーザー操作のないサーバー間統合向け: ```bash POST /oauth/token Content-Type: application/x-www-form-urlencoded grant_type=client_credentials& client_id=YOUR_CLIENT_ID& client_secret=YOUR_CLIENT_SECRET& scope=api ``` 返されるトークンは特定のユーザーに紐づかないワークスペースレベルのアクセス権を持ちます。 ## サーバーディスカバリー Twenty は標準のディスカバリーエンドポイントで OAuth 設定を公開しています: ``` GET /.well-known/oauth-authorization-server ``` これにより、すべてのエンドポイント、対応するグラントタイプ、スコープ、および機能が返されます—汎用的な OAuth クライアントを構築するのに役立ちます。 ## API エンドポイント概要 | エンドポイント | 目的 | | ----------------------------------------- | ----------------- | | `/.well-known/oauth-authorization-server` | サーバーメタデータのディスカバリー | | `/oauth/register` | 動的クライアント登録 | | `/oauth/authorize` | ユーザー認可 | | `/oauth/token` | トークンの交換とリフレッシュ | | 環境 | ベース URL | | ---------- | ------------------------ | | **クラウド** | `https://api.twenty.com` | | **セルフホスト** | `https://{your-domain}` | ## OAuth と API キー | | APIキー | OAuth | | --------------- | -------------- | ----------------- | | **セットアップ** | 設定で生成 | クライアントを登録し、フローを実装 | | **ユーザーコンテキスト** | なし(ワークスペースレベル) | 特定ユーザーの権限 | | **最適な用途** | スクリプト、社内ツール | 外部アプリ、マルチユーザー統合 | | **トークンローテーション** | 手動 | リフレッシュトークンにより自動 | | **スコープによるアクセス** | API へのフルアクセス | スコープによりきめ細かな制御 |