メインコンテンツまでスキップ
バージョン: 0.9.0 (最新)

🛣️ 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:

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:

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)

ハンドラープロセス:

  1. クエリパラメータを含むOAuth開始リクエストを受信
  2. 状態管理用のワンタイムトークンを生成
  3. リダイレクトを実行するためにLINE OAuthドライバーに委譲
  4. ユーザーは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失敗)

ハンドラープロセス:

  1. 認証コードと状態を含むLINEからのコールバックを受信
  2. LINE OAuthドライバーでユーザーを認証
  3. 暗号化されたトークンからログイン状態を抽出および検証
  4. 既存のアイデンティティを検索または新規作成(サインアップフロー用)
  5. セキュリティコンテキストでワンタイムトークンを生成
  6. 検証のためにデータベースにトークンを保存
  7. トークンでユーザーをクライアントアプリケーションにリダイレクト

使用例:

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