⚙️ 認証ハンドラーブロック
認証ハンドラーブロックは、Nodeblocksアプリケーションにおけるユーザー認証と認可操作のためのコアビジネスロジック関数を提供します。これらのハンドラーは、ログイン、登録、トークン管理、メール確認の共通パターンをカプセル化します。
🎯 概要
認証ハンドラーブロックは以下を目的として設計されています:
- 認証情報とトークンによるユーザー認証の処理
- 検証とセキュリティによるユーザー登録の管理
- 作成、更新、検証を含むトークン操作の処理
- メール確認ワークフローのサポート
- 適切なトークン検証とフィンガープリンティングによるセキュリティの確保
📋 認証ハンドラー種類
認証非同期ハンドラー
非同期認証操作(データベース呼び出し、トークン生成など)を実行する関数。
認証同期ハンドラー
同期認証操作(トークン検証、レスポンスフォーマッティングなど)を実行する関数。
認証ターミネーターハンドラー
最終的な認証レスポンスをフォーマットして返す関数。
🔧 利用可能な認証ハンドラー
loginWithCredentials
メールとパスワード認証情報でユーザーを認証します。
目的: 認証情報の検証とアカウントセキュリティによるユーザーログインを処理
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.email
またはcontext.data.email
: ユーザーメールparams.requestBody.password
またはcontext.data.password
: ユーザーパスワードcontext.db
: データベース接続context.configuration.maxFailedLoginAttempts
: 最大失敗試行回数(デフォルト: 5)
戻り値: Result<RouteHandlerPayload, Error>
- identityを含む成功またはエラー
ペイロード要件:
- メールとパスワードはリクエストボディまたはコンテキストデータで提供される必要があります
- データベース操作のために
context.db
が利用可能である必要があります context.configuration
にmaxFailedLoginAttempts設定が含まれている必要があります
主要機能:
- メールとパスワードが提供されていることを検証
- データベースでユーザーアイデンティティの存在を確認
- 認証のためにパスワードハッシュを比較
- 失敗試行後のアカウントロックを処理
- 成功したログイン時の失敗試行のリセット
- 成功時にアイデンティティデータを返す
- データベースエラーを適切に処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { loginWithCredentials } = handlers;
// コンポジションでの使用
const authPipeline = compose(loginWithCredentials, createAccessToken, createRefreshToken, setResponseCookie, loginTerminator);
createAccessToken
認証済みセッション用のユーザーアクセストークンを生成します。
目的: フィンガープリント検証付きの安全なアクセストークンを作成
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.fingerprint
またはcontext.data.fingerprint
: セキュリティフィンガープリントparams.requestBody.id
またはcontext.data.id
またはcontext.identity.id
: ユーザーIDcontext.request
: Expressリクエストオブジェクトcontext.configuration.authSecrets
: 認証シークレットcontext.configuration.jwtOpts
: JWTオプション
戻り値: Result<RouteHandlerPayload, Error>
- accessTokenを含む成功またはエラー
ペイロード要件:
- ユーザーIDはリクエストボディ、コンテキストデータ、またはアイデンティティから利用可能である必要があります
- トークン検証のために
context.request
にIPとヘッダーが含まれている必要があります context.configuration.authSecrets
とjwtOpts
が利用可能である必要があります
主要機能:
- 複数のソース(リクエストボディ、コンテキストデータ、アイデンティティ)からユーザーIDを抽出
- ドメイン、フィンガープリント、IP、ユーザーエージェントでトークン検証を構築
- JWTで安全なユーザーアクセストークンを生成
- 成功時にアクセストークンを返す
- トークン生成エラーを適切に処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { createAccessToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(loginWithCredentials, createAccessToken, createRefreshToken, setResponseCookie, loginTerminator);
createRefreshToken
トークン更新用のリフレッシュトークンを生成します。
目的: データベース保存付きの安全なリフレッシュトークンを作成
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.fingerprint
またはcontext.data.fingerprint
: セキュリティフィンガープリントparams.requestBody.id
またはcontext.data.id
またはcontext.identity.id
: ユーザーIDcontext.request
: Expressリクエストオブジェクトcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレットcontext.configuration.refreshTokenOpts
: リフレッシュトークンオプションcontext.configuration.refreshTokenExpireTime
: リフレッシュトークン期限
戻り値: Result<RouteHandlerPayload, Error>
- refreshTokenを含む成功またはエラー
ペイロード要件:
- ユーザーIDはリクエストボディ、コンテキストデータ、またはアイデンティティから利用可能である必要があります
- トークン検証のために
context.request
にIPとヘッダーが含まれている必要があります - トークン保存のために
context.db
が利用可能である必要があります context.configuration
に認証シークレットとリフレッシュトークンオプションが含まれている必要があります
主要機能:
- 複数のソースからユーザーIDとフィンガープリントを抽出
- ドメイン、フィンガープリント、IP、ユーザーエージェントでトークン検証を構築
- JWTで安全なリフレッシュトークンを生成
- 期限付きでデータベースにトークンを保存
- 成功時にリフレッシュトークンを返す
- トークン生成と保存エラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { createRefreshToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(loginWithCredentials, createAccessToken, createRefreshToken, setResponseCookie, loginTerminator);
setResponseCookie
HTTPレスポンスで認証クッキーを設定します。
目的: アクセストークンとリフレッシュトークン用の安全なクッキーを構成
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むcontext.response
: Expressレスポンスオブジェクトcontext.cookieOpts
: クッキー設定オプションcontext.data.accessToken
: クッキーに設定するアクセストークンcontext.data.refreshToken
: クッキーに設定するリフレッシュトークン
戻り値: Result<RouteHandlerPayload, Error>
- 更新されたペイロードを含む成功またはエラー
ペイロード要件:
- クッキー設定のために
context.response
が利用可能である必要があります context.cookieOpts
にクッキー設定が含まれている必要があります- アクセストークンおよび/またはリフレッシュトークンがコンテキストデータで利用可能である必要があります
主要機能:
- レスポンスオブジェクトが利用可能であることを検証
- Access-Control-Allow-Credentialsヘッダーを設定
- アクセストークン用の安全なクッキーを構成
- リフレッシュトークン用の安全なクッキーを構成
- 提供されたクッキーオプションを使用してセキュリティを確保
- 成功時に更新されたペイロードを返す
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { setResponseCookie } = handlers;
// コンポジションでの使用
const authPipeline = compose(loginWithCredentials, createAccessToken, createRefreshToken, setResponseCookie, loginTerminator);
registerCredentials
メールとパスワードで新しいユーザーアカウントを登録します。
目的: パスワードハッシュ化とアカウント作成による新規ユーザー登録を処理
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.email
またはcontext.data.email
: ユーザーメールparams.requestBody.password
またはcontext.data.password
: ユーザーパスワードcontext.db
: データベース接続
戻り値: Result<RouteHandlerPayload, Error>
- identityを含む成功またはエラー
主要機能:
- メールとパスワードの存在を検証
- 既存のメールアドレスの重複をチェック
- 安全なパスワードハッシュを生成
- データベースに新しいアイデンティティを作成
- 成功時にアイデンティティデータを返す
- 重複メールとデータベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { registerCredentials } = handlers;
// コンポジションでの使用
const registerPipeline = compose(registerCredentials, createAccessToken, createRefreshToken, registerTerminator);
sendVerificationEmail
ユーザーメール確認のための確認メールを送信します。
目的: メール確認トークンとメール送信による確認プロセスを処理
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestParams.userId
またはcontext.data.userId
: ユーザーIDcontext.db
: データベース接続context.configuration.emailService
: メールサービス設定
戻り値: Result<RouteHandlerPayload, Error>
- 成功またはエラー
主要機能:
- ユーザーIDの存在を検証
- データベースでユーザーアイデンティティを検索
- 確認トークンを生成
- データベースに確認トークンを保存
- 確認リンク付きメールを送信
- メール送信とデータベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { sendVerificationEmail } = handlers;
// コンポジションでの使用
const verificationPipeline = compose(sendVerificationEmail, emailSentTerminator);
refreshToken
有効なリフレッシュトークンを使用してアクセストークンを更新します。
目的: トークンのローテーションと新規アクセストークン/リフレッシュトークンペアの生成
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.fingerprint
またはcontext.data.fingerprint
またはcontext.fingerprint
: セキュリティフィンガープリントcontext.request
: クッキーとボディを含むExpressリクエストオブジェクトcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレットcontext.configuration.jwtOpts
: JWTオプション
戻り値: Result<RouteHandlerPayload, Error>
- 新しいトークンを含む成功またはエラー
ペイロード要件:
- クッキーまたはボディにリフレッシュトークンが含まれている必要があります
- トークン無効化のために
context.db
が利用可能である必要があります context.configuration
に認証シークレットとJWTオプションが含まれている必要があります
主要機能:
- 複数のソースからフィンガープリントを抽出
- クッキーとボディからのリフレッシュトークンを検証
- 整合性のためにクッキーとボディトークンを比較
- データベースで古いリフレッシュトークンを無効化
- 新しいアクセスとリフレッシュトークンを生成
- 成功時に新しいトークンペアを返す
- トークン検証と生成エラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { refreshToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(refreshToken, setResponseCookie, loginTerminator);
confirmEmail
確認トークンでユーザーメールアドレスを確認します。
目的: トークン検証とアカウント有効化によるメール確認を処理
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.token
またはcontext.data.token
: 確認トークンcontext.db
: データベース接続
戻り値: Result<RouteHandlerPayload, Error>
- 成功またはエラー
主要機能:
- 確認トークンの存在を検証
- データベースで有効なトークンを検索
- トークンの期限を確認
- ユーザーアイデンティティを確認済みとしてマーク
- 使用済みトークンを削除
- 無効または期限切れトークンを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { confirmEmail } = handlers;
// コンポジションでの使用
const confirmationPipeline = compose(confirmEmail, emailConfirmedTerminator);
logout
ユーザーセッションを終了し、リフレッシュトークンを無効化します。
目的: トークン無効化とセッションクリーンアップによるログアウトを処理
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.refreshToken
またはcontext.data.refreshToken
: リフレッシュトークンcontext.db
: データベース接続
戻り値: Result<RouteHandlerPayload, Error>
- 成功またはエラー
主要機能:
- リフレッシュトークンの存在を検証
- データベースからトークンを削除
- セッションデータをクリーンアップ
- 成功したログアウトを確認
- データベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { logout } = handlers;
// コンポジションでの使用
const logoutPipeline = compose(logout, logoutTerminator);
checkToken
認証トークンを検証し、ユーザー情報を抽出します。
目的: トークンの真正性を検証し、ユーザー情報を抽出
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.token
: 検証するトークンcontext.data.checkToken.target
: トークンターゲット(オプション)context.request
: Expressリクエストオブジェクトcontext.db
: 一回限りトークン用のデータベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- トークン情報またはエラーを含む成功
ペイロード要件:
- リクエストボディにトークンが含まれている必要があります
- リクエスト情報抽出のために
context.request
が利用可能である必要があります - 一回限りトークン検証のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- リクエストからトークンとフィンガープリントを抽出
- JWT検証を使用してトークンを検証
- ユーザーアクセストークンと一回限りトークンを処理
- アクセストークンに対してセキュリティチェックを実行
- 一回限りトークンのターゲットと状態を検証
- 使用後に一回限りトークンを無効化
- 成功時にトークン情報またはユーザーIDを返す
- トークン検証エラーを適切に処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { checkToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(checkToken, someOtherHandler);
deleteToken
ユーザーセッションを無効化します。
目的: セキュリティ検証によるトークンの削除
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むcontext.data.id
またはparams.requestBody.id
またはparams.requestQuery.id
: トークンを削除するユーザーIDcontext.request
: クッキーとヘッダーを含むExpressリクエストオブジェクトcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- 更新されたペイロードを含む成功またはエラー
ペイロード要件:
- リクエストボディ、コンテキストデータ、またはクエリパラメータにユーザーIDが含まれている必要があります
- トークン抽出のために
context.request
が利用可能である必要があります - トークン無効化のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- 複数のソースからユーザーIDを抽出
- クッキーとBearerヘッダーからトークンを検証
- 整合性のためにクッキーとBearerトークンを比較
- アプリアクセストークンのスーパーパーミッションを処理
- ユーザーが自分のトークンのみを削除できることを検証
- 削除タイムスタンプ付きでデータベースのトークンを無効化
- 成功時に更新されたペイロードを返す
- トークン検証と削除エラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { deleteToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(deleteToken, someTerminator);
loginWithOnetimeToken
一回限りトークンを使用してユーザーを認証します。
目的: 一時的な一回限りトークンによる認証
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.onetimeToken
: 認証用の一回限りトークンcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- 更新されたペイロードを含む成功またはエラー
ペイロード要件:
- リクエストボディに一回限りトークンが含まれている必要があります
- トークン検証のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- リクエストボディから一回限りトークンを検証
- JWTを使用してトークンを復号化して検証
- トークンタイプが'onetime'であることを検証
- データベースでトークンが見つかり、有効であることを確認
- 成功した使用後にトークンを無効化
- トークン目的が'onetime-login'であることを検証
- 成功時に更新されたペイロードを返す
- トークン検証とデータベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { loginWithOnetimeToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(loginWithOnetimeToken, createAccessToken, createRefreshToken, setResponseCookie, loginTerminator);
generateOnetimeToken
一時アクセス用のトークンを生成します。
目的: データベース保存付きの安全な一回限りトークンの作成
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.fingerprint
またはcontext.data.fingerprint
またはcontext.fingerprint
: セキュリティフィンガープリントparams.requestBody.target
またはcontext.data.target
またはcontext.target
: トークンターゲットparams.requestBody.tokenData
またはcontext.data.tokenData
またはcontext.tokenData
: トークンデータオブジェクトcontext.request
: Expressリクエストオブジェクトcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- 生成されたトークンを含む成功またはエラー
ペイロード要件:
- オブジェクトとしてのトークンデータが提供される必要があります
- リクエスト情報のために
context.request
が利用可能である必要があります - トークン保存のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- トークンデータがオブジェクトとして提供されていることを検証
- 複数のソースからフィンガープリント、ターゲット、トークンデータを抽出
- ドメイン、フィンガープリント、IP、ターゲットでトークン検証を構築
- JWTで安全な一回限りトークンを生成
- 無効化フラグ付きでデータベースにトークンを保存
- 成功時に生成されたトークンを返す
- トークン生成と保存エラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { generateOnetimeToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(generateOnetimeToken, someTerminator);
restoreOnetimeToken
以前に無効化された一回限りトークンを復元します。
目的: 一回限りトークンを再利用可能にする
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.token
: 復元するトークンcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- 復元されたトークンを含む成功またはエラー
ペイロード要件:
- リクエストボディにトークンが含まれている必要があります
- トークン更新のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- リクエストボディにトークンが提供されていることを検証
- JWTを使用してトークンを復号化して検証
- トークンがステートフル(一回限りトークン)であることを検証
- データベースでトークンの無効化ステータスを更新
- 成功時に復元されたトークンを返す
- トークン検証とデータベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { restoreOnetimeToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(restoreOnetimeToken, someTerminator);
invalidateOnetimeToken
一回限りトークンを無効化します。
目的: 一回限りトークンを永続的に無効化
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含むparams.requestBody.token
またはcontext.data.token
またはcontext.token
: 無効化するトークンparams.requestBody.fingerprint
またはcontext.data.fingerprint
またはcontext.fingerprint
: セキュリティフィンガープリントcontext.db
: データベース接続context.configuration.authSecrets
: 認証シークレット
戻り値: Result<RouteHandlerPayload, Error>
- 無効化されたトークンを含む成功またはエラー
ペイロード要件:
- トークンとフィンガープリントが提供される必要があります
- トークン更新のために
context.db
が利用可能である必要があります context.configuration.authSecrets
が利用可能である必要があります
主要機能:
- トークンとフィンガープリントが提供されていることを検証
- JWTを使用してトークンを復号化して検証
- トークンがステートフル(一回限りトークン)であることを検証
- データベースでトークンの無効化ステータスを更新
- 成功時に無効化されたトークンを返す
- トークン検証とデータベースエラーを処理
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { invalidateOnetimeToken } = handlers;
// コンポジションでの使用
const authPipeline = compose(invalidateOnetimeToken, someTerminator);
buildCheckConfirmEmailTokenPayload
メール確認トークン検証用のペイロードを構築します。
目的: メール確認ワークフローのトークン検証を設定
パラメータ:
payload
:RouteHandlerPayload
- リクエストコンテキストとデータを含む
戻り値: Result<RouteHandlerPayload, Error>
- checkToken設定を含む成功
ペイロード要件:
- 特定の要件なし - このハンドラーは常に成功します
主要機能:
- メール確認ターゲット付きでcheckToken設定をマージ
- TARGET_CONFIRM_EMAIL定数をターゲットとして設定
- エラー条件なし(常に成功)
- checkToken設定を含む更新されたペイロードを返す
- メール確認ワークフローの準備ステップとして使用
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { buildCheckConfirmEmailTokenPayload } = handlers;
// コンポジションでの使用
const authPipeline = compose(buildCheckConfirmEmailTokenPayload, checkToken, confirmEmail, confirmEmailTerminator);
ターミネーターハンドラー
loginTerminator
成功したログインレスポンスをフォーマットします。
目的: アクセストークン、リフレッシュトークン、ユーザーIDでログインレスポンスをフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
戻り値: アクセストークン、リフレッシュトークン、ユーザーIDを含むフォーマット済みレスポンス
使用例:
compose(loginWithCredentials, createAccessToken, createRefreshToken, loginTerminator);
registerTerminator
成功した登録レスポンスをフォーマットします。
目的: アクセストークン、リフレッシュトークン、ユーザーIDで登録レスポンスをフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
戻り値: アクセストークン、リフレッシュトークン、ユーザーIDを含むフォーマット済みレスポンス
使用例:
compose(registerCredentials, createAccessToken, createRefreshToken, registerTerminator);
emailSentTerminator
成功したメール送信レスポンスをフォーマットします。
目的: 確認メール送信成功のメッセージをフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
戻り値: 成功メッセージを含むフォーマット済みレスポンス
logoutTerminator
成功したログアウトレスポンスをフォーマットします。
目的: ログアウト成功確認をフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
戻り値: ログアウト成功メッセージを含むフォーマット済みレスポンス
confirmEmailTerminator
メール確認プロセスを適切なステータスコードで終了します。
目的: 204ステータスで成功したメール確認レスポンスをフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
- ペイロードまたはエラーを含む結果context.data.confirmEmail
: 前のハンドラーからの確認結果
戻り値: 204 statusCodeを含むレスポンスオブジェクト
ペイロード要件:
context.data.confirmEmail
が前のハンドラーから利用可能であること
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { confirmEmailTerminator } = handlers;
// コンポジションでの使用
const authPipeline = compose(checkToken, confirmEmail, confirmEmailTerminator);
sendVerificationEmailTerminator
メール送信プロセスを適切なステータスコードで終了します。
目的: 204ステータスで成功したメール送信レスポンスをフォーマット
パラメータ:
result
:Result<RouteHandlerPayload, Error>
- ペイロードまたはエラーを含む結果context.data.sendVerificationEmail
: 前のハンドラーからのメール送信結果context.data.token
: 前のハンドラーからの生成されたトークン
戻り値: 204 statusCodeを含むレスポンスオブジェクト
ペイロード要件:
context.data.sendVerificationEmail
とtoken
が前のハンドラーから利用可能であること
使用方法:
import { handlers } from '@nodeblocks/backend-sdk';
const { sendVerificationEmailTerminator } = handlers;
// コンポジションでの使用
const authPipeline = compose(sendVerificationEmail, sendVerificationEmailTerminator);
🔗 関連ドキュメント
- 認証スキーマブロック - 認証データ検証と契約
- 認証ルートブロック - 認証HTTPエンドポイント定義
- 認証フィーチャーブロック - 認証コンポーズ機能
- 認証バリデーターブロック - 認証検証関数