🛣️ OAuthルート
OAuthルートは、NodeBlocksアプリケーションでサードパーティのOAuthフロー用の事前設定されたHTTPエンドポイントを提供します。これらのルートはブロック、ロギング、エラーハンドリングを構成して、堅牢なOAuthエクスペリエンスを提供します。現在サポートされているプロバイダー: Google、Twitter、LINE。
🎯 概要
OAuthルートは以下の目的で設計されています:
- OAuthエンドポイントを公開 - 開始とコールバック処理用
- ロギングでハンドラーを構成 - 可観測性のため
- エラーハンドリングを一元化 - 一貫したHTTPステータスマッピングで
- スキーマ検証を活用 - クエリパラメータ用
📋 ルート構造
各OAuthルートは一貫したパターンに従います:
- HTTP Method: 操作タイプ(GET)
- Path: エンドポイントURL
- Blocks: OAuthフローオーケストレーション用の構成された関数チェーン
- Validators: 認証と認可チェック(OAuthルートにはなし)
🔧 利用可能なOAuthルート
googleOAuthRoute
GET /auth/oauth/google経由でGoogle OAuth認証フローを開始します。
目的: OAuthドライバーに委譲し、状態を準備してGoogle OAuthフローを開始します。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/google - Authentication: 不要
Blocks:
requestGoogleOAuth- Google OAuthフローを開始し、署名付き状態を生成
Validators: なし(検証はスキーマで処理)
使用例:
import { compose } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const googleOAuthFeature = compose(googleOauthSchema, googleOAuthRoute);
googleOAuthCallbackRoute
GET /auth/oauth/google/callback経由でGoogle OAuthコールバックを処理します。
目的: OAuthコールバックを処理し、ユーザーを認証し、ワンタイムトークンを生成し、クライアントアプリケーションにリダイレクトします。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/google/callback - Authentication: 不要
Blocks:
authenticateGoogleOAuth- プロバイダーコールバックを検証し、ユーザープロファイルを読み取りextractOAuthLoginState- 暗号化されたトークンからOAuthログイン状態を抽出および検証checkEmailIsUniqueInIdentities- メールの一意性を検証(サインアップのみ)verifyGoogleOAuth- プロバイダープロファイルに基づいてアイデンティティを解決または作成getLoginTokenTarget- ログイントークンターゲット定数を返すgetFingerprint- リクエストからセキュリティフィンガープリントを抽出buildTokenVerification- トークン生成用のセキュリティコンテキストを構築buildJwtOptions- 有効期限付きJWTオプションを作成generateOneTimeToken- ワンタイム認証トークンを生成storeOneTimeToken- データベースにワンタイムトークンを保存generateRedirectURL- ワンタイムトークンでリダイレクトURLを生成redirectTo- クライアントにHTTPリダイレクトを発行
Validators: なし(検証はスキーマで処理)
使用例:
import { compose } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const googleOAuthCallbackFeature = compose(
googleOAuthCallbackRoute
);
twitterOAuthRoute
GET /auth/oauth/twitter経由でTwitter OAuth認証フローを開始します。
目的: 準備された状態でOAuthドライバーに委譲してTwitter OAuthフローを開始します。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/twitter - Authentication: 不要
Blocks:
prepareTwitterCallbackState—{ purpose, redirectUrl, typeId }を構築requestTwitterOAuth— 認証を開始するためにドライバーを呼び出し
Validators: なし(検証はスキーマで処理)
使用例:
import { compose } from '@nodeblocks/backend-sdk';
export const twitterOAuthFeature = compose(twitterOauthSchema, twitterOAuthRoute);
twitterOAuthCallbackRoute
GET /auth/oauth/twitter/callback経由でTwitter OAuthコールバックを処理します。
目的: OAuthコールバックを処理し、ユーザーを認証し、ワンタイムトークンを生成し、クライアントアプリケーションにリダイレクトします。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/twitter/callback - Authentication: 不要
Blocks:
authenticateTwitterOAuth— プロバイダーコールバックを検証し、ユーザーを読み取りverifyTwitterOAuth— プロバイダープロファイルに基づいてアイデンティティを解決または作成getLoginTokenTarget- ログイントークンターゲット定数を返すgetFingerprint- リクエストからセキュリティフィンガープリントを抽出buildTokenVerification- トークン生成用のセキュリティコンテキストを構築buildJwtOptions- 有効期限付きJWTオプションを作成generateOneTimeToken- ワンタイム認証トークンを生成storeOneTimeToken- データベースにワンタイムトークンを保存generateRedirectURL- ワンタイムトークンでリダイレクトURLを生成redirectTo— クライアントにHTTPリダイレクトを発行
Validators: なし(検証はスキーマで処理)
使用例:
import { compose } from '@nodeblocks/backend-sdk';
export const twitterOAuthCallbackFeature = compose(
twitterOAuthCallbackRoute
);
lineOAuthRoute
GET /auth/oauth/line経由でLINE OAuth認証フローを開始します。
目的: OAuthドライバーに委譲し、状態を準備してLINE OAuthフローを開始します。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/line - Authentication: 不要
Blocks:
requestLineOAuth- LINE OAuthフローを開始し、署名付き状態トークンを生成
Validators: なし(検証はスキーマで処理)
クエリパラメータ:
fp: string(required) — デバイスフィンガープリント識別子purpose: 'oauth-login' | 'oauth-signup'(required) — OAuthフロー目的redirectUrl: string(required) — クライアントリダイレクト先typeId: string(required) — サインアップ用のアイデンティティタイプ識別子
レスポンス: LINE OAuth認証ページにリダイレクト(302)
ハンドラープロセス:
- クエリパラメータを含むOAuth開始リクエストを受信
- 状態管理用のワンタイムトークンを生成
- リダイレクトを実行するためにLINE OAuthドライバーに委譲
- ユーザーはLINE認証ページにリダイレクトされます
使用例:
import { compose } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const lineOAuthFeature = compose(lineOauthSchema, lineOAuthRoute);
リクエスト例:
GET /auth/oauth/line?fp=1234567890&purpose=oauth-login&redirectUrl=https://app.com/callback&typeId=regular
lineOAuthCallbackRoute
GET /auth/oauth/line/callback経由でLINE OAuthコールバックを処理します。
目的: OAuthコールバックを処理し、ユーザーを認証し、ワンタイムトークンを生成し、クライアントアプリケーションにリダイレクトします。
ルート詳細:
- Method:
GET - Path:
/auth/oauth/line/callback - Authentication: 不要
Blocks:
authenticateLineOAuth- プロバイダーコールバックを検証し、ユーザープロファイルを読み取りextractOAuthLoginState- 暗号化されたトークンからOAuthログイン状態を抽出および検証verifyLineOAuth- プロバイダープロファイルに基づいてアイデンティティを解決または作成getLoginTokenTarget- ログイントークンターゲット定数を返すgetFingerprint- リクエストからセキュリティフィンガープリントを抽出buildTokenVerification- トークン生成用のセキュリティコンテキストを構築buildJwtOptions- 有効期限付きJWTオプションを作成generateOneTimeToken- ワンタイム認証トークンを生成storeOneTimeToken- データベースにワンタイムトークンを保存generateRedirectURL- ワンタイムトークンでリダイレクトURLを生成redirectTo- クライアントにHTTPリダイレクトを発行
Validators: なし(検証はスキーマで処理)
エラーレスポンス:
400- AuthenticationInvalidInputError(必須フィールドの欠落または無効な入力)404- AuthenticationNotFoundError(ログインフロー用のアイデンティティが見つかりません)500- AuthenticationUnexpectedDBError(データベースエラー)、AuthenticationOAuthError(OAuth失敗)
ハンドラープロセス:
- 認証コードと状態を含むLINEからのコールバックを受信
- LINE OAuthドライバーでユーザーを認証
- 暗号化されたトークンからログイン状態を抽出および検証
- 既存のアイデンティティを検索または新規作成(サインアップフロー用)
- セキュリティコンテキストでワンタイムトークンを生成
- 検証のためにデータベースにトークンを保存
- トークンでユーザーをクライアントアプリケーションにリダイレクト
使用例:
import { compose } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const lineOAuthCallbackFeature = compose(
lineOAuthCallbackRoute
);
フロー例:
1. LINE redirects to: GET /auth/oauth/line/callback?code=ABC123&state=XYZ789
2. Backend processes authentication
3. Backend redirects to: https://app.com/callback?token=JWT_TOKEN