OAuth2

OAuth2 に関するドキュメント

ベースパス:/api/v1/oauth2

サードパーティ連携を接続するための OAuth2 認可コードフローを処理します。フロントエンドは authorize エンドポイントへのリダイレクトでフローを開始し、連携サービスがコールバックを処理します。


OAuth2 フロー概要

text

GET /api/v1/oauth2/:group/authorize

OAuth2 認可フローを開始します。サーバーはプロバイダーの認可 URL を構築し、ユーザーをそこへリダイレクトします。

認証

JWT が必要です(authMiddleware + activeOrgPreferenceMiddleware)。

パスパラメータ

パラメータ説明
groupstring連携グループ/スラッグ(例:"google-workspace""slack"

クエリパラメータ

パラメータ必須説明
appCallbackUrlstring (URL)はい認証成功後のリダイレクト先 URL(フロントエンドのコールバック URL)
actionstringはい認可する特定のアクション、またはすべてのアクションの場合は "all"
scopesstring[]いいえ要求する追加の OAuth2 スコープ(スペースまたはカンマ区切り、または複数パラメータ)
tokenstringいいえJWT トークンのオーバーライド(リダイレクトでトークンを運ぶ場合に便利)
baseUrlstringいいえセルフホストサービスインスタンス用のカスタムベース URL

レスポンス

302 Found — ブラウザを OAuth2 プロバイダーの認可 URL にリダイレクトします。

リダイレクト URL には以下が含まれます。

  • { appCallbackUrl, userId, orgKey, action, scopes, baseUrl } をエンコードした state パラメータ
  • コールバックエンドポイントを指す redirect_uri
  • 要求されたスコープ
  • PKCE パラメータ(連携で必要な場合)

javascript

GET /api/v1/oauth2/:group/callback

ユーザーがアプリケーションを認可した後の OAuth2 プロバイダーのコールバックを処理します。認可コードをアクセス/リフレッシュトークンと交換し、保存します。

認証

認証は不要です。 このエンドポイントは OAuth2 プロバイダーのリダイレクトによって呼び出されます。

パスパラメータ

パラメータ説明
groupstring連携グループ/スラッグ

クエリパラメータ(OAuth2 プロバイダーが提供)

パラメータ必須説明
codestringはいOAuth2 プロバイダーからの認可コード
statestringはいステートパラメータ(エンコードされたコールバック URL とコンテキストを含む)

レスポンス

302 Found — ステータスパラメータ付きで appCallbackUrl にリダイレクトします。

https://myapp.example.com/oauth/callback?status=success

エラー時、リダイレクトにはエラーパラメータが含まれる場合があります。

https://myapp.example.com/oauth/callback?status=error&error=access_denied

フロントエンドコールバックの処理

javascript

連携固有の注記

PKCE サポート

一部の連携では PKCE(Proof Key for Code Exchange)が必要です。連携のクレデンシャル設定で requiresPKCE: true が設定されている場合、サーバーは PKCE チャレンジ/ベリファイアの生成と検証を自動的に処理します。

カスタムベース URL

セルフホストサービスインスタンス(例:セルフホスト GitLab、Jira)では、baseUrl パラメータを渡してトークン交換に使用するデフォルト API ベース URL をオーバーライドします。

スコープの処理

OAuth2 スコープはアクションの scopes 設定によって決定されます。scopes クエリパラメータにより、アクションのデフォルトを超える追加スコープを要求できます。複数の scopes 値は配列またはカンマ区切り文字列として渡せます。

トークンストレージ

交換成功後:

  • アクセストークンとリフレッシュトークンは暗号化され、連携サービスデータベースに保存されます
  • トークンは (userId, orgKey, integrationSlug, action) にスコープされます
  • トークン期限切れ時のリフレッシュは自動的に処理されます
ja/api-docs/oauth2