OAuth2
OAuth2 に関するドキュメント
ベースパス:/api/v1/oauth2
サードパーティ連携を接続するための OAuth2 認可コードフローを処理します。フロントエンドは authorize エンドポイントへのリダイレクトでフローを開始し、連携サービスがコールバックを処理します。
OAuth2 フロー概要
GET /api/v1/oauth2/:group/authorize
OAuth2 認可フローを開始します。サーバーはプロバイダーの認可 URL を構築し、ユーザーをそこへリダイレクトします。
認証
JWT が必要です(authMiddleware + activeOrgPreferenceMiddleware)。
パスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
group | string | 連携グループ/スラッグ(例:"google-workspace"、"slack") |
クエリパラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
appCallbackUrl | string (URL) | はい | 認証成功後のリダイレクト先 URL(フロントエンドのコールバック URL) |
action | string | はい | 認可する特定のアクション、またはすべてのアクションの場合は "all" |
scopes | string[] | いいえ | 要求する追加の OAuth2 スコープ(スペースまたはカンマ区切り、または複数パラメータ) |
token | string | いいえ | JWT トークンのオーバーライド(リダイレクトでトークンを運ぶ場合に便利) |
baseUrl | string | いいえ | セルフホストサービスインスタンス用のカスタムベース URL |
レスポンス
302 Found — ブラウザを OAuth2 プロバイダーの認可 URL にリダイレクトします。
リダイレクト URL には以下が含まれます。
{ appCallbackUrl, userId, orgKey, action, scopes, baseUrl }をエンコードしたstateパラメータ- コールバックエンドポイントを指す
redirect_uri - 要求されたスコープ
- PKCE パラメータ(連携で必要な場合)
例
GET /api/v1/oauth2/:group/callback
ユーザーがアプリケーションを認可した後の OAuth2 プロバイダーのコールバックを処理します。認可コードをアクセス/リフレッシュトークンと交換し、保存します。
認証
認証は不要です。 このエンドポイントは OAuth2 プロバイダーのリダイレクトによって呼び出されます。
パスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
group | string | 連携グループ/スラッグ |
クエリパラメータ(OAuth2 プロバイダーが提供)
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
code | string | はい | OAuth2 プロバイダーからの認可コード |
state | string | はい | ステートパラメータ(エンコードされたコールバック URL とコンテキストを含む) |
レスポンス
302 Found — ステータスパラメータ付きで appCallbackUrl にリダイレクトします。
https://myapp.example.com/oauth/callback?status=success
エラー時、リダイレクトにはエラーパラメータが含まれる場合があります。
https://myapp.example.com/oauth/callback?status=error&error=access_denied
フロントエンドコールバックの処理
連携固有の注記
PKCE サポート
一部の連携では PKCE(Proof Key for Code Exchange)が必要です。連携のクレデンシャル設定で requiresPKCE: true が設定されている場合、サーバーは PKCE チャレンジ/ベリファイアの生成と検証を自動的に処理します。
カスタムベース URL
セルフホストサービスインスタンス(例:セルフホスト GitLab、Jira)では、baseUrl パラメータを渡してトークン交換に使用するデフォルト API ベース URL をオーバーライドします。
スコープの処理
OAuth2 スコープはアクションの scopes 設定によって決定されます。scopes クエリパラメータにより、アクションのデフォルトを超える追加スコープを要求できます。複数の scopes 値は配列またはカンマ区切り文字列として渡せます。
トークンストレージ
交換成功後:
- アクセストークンとリフレッシュトークンは暗号化され、連携サービスデータベースに保存されます
- トークンは
(userId, orgKey, integrationSlug, action)にスコープされます - トークン期限切れ時のリフレッシュは自動的に処理されます