数分で Logto のための Node.js ベースのフレームワーク SDK を作成する
`@logto/node` を使用して Logto のカスタム SDK を作成する方法を学びます。
以前、この 記事 では、数分で Logto 用の Web SDK を作成しました。今回は、JavaScript 開発者に人気のあるもう一つのプラットフォームである Node.js に焦点を当てます。
このガイドでは、@logto/node
を使用して Logto 用のシンプルな Express SDK を作成する手順をお教えします。この SDK はサインインフローを実装し、同じ手順で Koa、Next.js、NestJS などの他の Node.js ベースのプラットフォーム用の SDK を作成することができます。
サインインフロー
始める前に、Logto のサインインフローを復習しましょう。サインインフローは次のステップで構成されます:
- Logto へのリダイレクト: ユーザーは Logto のサインインページにリダイレクトされます。
- 認証: ユーザーは認証情報を入力し、Logto で認証を行います。
- アプリにリダイレクト: 認証が成功すると、ユーザーは認証コードと共にアプリにリダイレクトされます。
- コード交換: アプリは認証コードをトークンと交換し、それを認証状態として保持します。
@logto/node
の簡単な紹介
@logto/browser
と同様に、@logto/node
パッケージは Logto のコア機能を提供する LogtoClient
クラスを公開し、サインインフローのためのメソッドを含んでいます:
signIn()
: OIDC 認証 URL を生成し、それにリダイレクトします。handleSignInCallback()
: コールバック URL を検査して解析し認証コードを抽出し、そのコードをトークンと交換するためにトークンエンドポイントを呼び出します。getContext()
: セッションクッキーに基づいて現在のリクエストのコンテキストを取得し、認証状態やユーザー情報を含みます。
Express SDK の作成
この SDK では、/sign-in
と /sign-in-callback
の 2 つのルートハンドラーと、withLogto
ミドルウェアを提供します:
/sign-in
: OIDC の認証 URL にリダイレクトするレスポンスでサインインフローをトリガーするルートハンドラーです。/sign-in-callback
: コールバック URL を処理し、認証コードをトークンと交換し、それらを保存してサインインフローを完了するルートハンドラーです。withLogto
ミドルウェア: 現在のリクエストのコンテキスト、認証状態やユーザー情報を取得するためにgetContext()
を呼び出すミドルウェアです。
この SDK を使用するには、Express アプリにミドルウェアを追加してルートを保護し、サインインフローをトリガーし、コールバックを処理するためにルートハンドラーを使用するだけです。
ステップ 1: パッケージをインストールする
まず、npm や他のパッケージマネージャーを使用して @logto/node
パッケージをインストールします:
ステップ 2: ストレージアダプターを準備する
LogtoClient
インスタンスを初期化するためにストレージアダプターが必要です。
SDK ユーザーがすでに Express セッションをセットアップしていると仮定して、新しいファイル storage.ts
を作成して Storage
クラスを単純に実装します:
ステップ 3: ルートハンドラーを実装する
HTTP リクエストはステートレスであるため、各リクエストごとにクライアントインスタンスを初期化する必要があります。クライアントインスタンスを作成するために関数ヘルパーを準備しましょう:
この関数では、navigate
アダプターと ExpressStorage
アダプターを実装します。navigate
アダプターは、ユーザーをサインイン URL にリダイレクトするために使用されます。
次に、handleAuthRoutes
関数に包まれたルートハンドラーを実装しましょう:
/auth/sign-in
ルートハンドラーはsignIn()
を呼び出してサインインフローをトリガーし、サインイン状態がセッションに保存され、それが/auth/sign-in-callback
ルートハンドラーによって利用されます。/auth/sign-in-callback
ルートハンドラーはコールバック URL を処理し、認証コードをトークンと交換するためにhandleSignInCallback()
を呼び出し、トークンはExpressStorage
アダプターを経由してセッションに保存されます。交換が完了したら、ユーザーはホームページにリダイレクトされます。
ステップ 4: ミドルウェアを実装する
withLogto
ミドルウェアはルートを保護するために使用されます。getContext()
を呼び出して現在のリクエストのコンテキストを取得し、認証状態やユーザー情報を含みます。
getContext
関数はストレージアダプターを使用してセッションからトークンを取得します。
チェックポイント: SDK の使用
これで Logto 用の Express SDK を作成し、ルートを保護するためにミドルウェアを追加し、サインインフローをトリガーしてコールバックを処理するためにルートハンドラーを使用することができます。
ここでは、Express アプリで SDK を使用する方法の簡単な例を示します:
この例では、withLogto
ミドルウェアを使用して認証状態を確認し、認証されていない場合はユーザーをサインインページにリダイレクトし、そうでない場合は歓迎メッセージを表示します。
公式の Express サンプルプロジェクトは こちら で確認できます。
結論
このガイドでは、Logto 用の Express SDK を作成し、基本的な認証フローを実装する手順を案内しました。ここで提供された SDK は基本的な例です。アプリのニーズに応じて、さらにメソッドや機能を追加して拡張することができます。
同じ手順を踏むことで、Node.js で動作する他の JavaScript ベースのプラットフォーム向けの SDK を作成することもできます。
リソース: