このドキュメントはAIによって翻訳されました。不 正確な情報については、英語版をご参照ください
認証タイプの拡張
概要
NocoBaseでは、必要に応じてユーザー認証タイプを拡張できます。ユーザー認証には主に2つのタイプがあります。1つは、パスワードログインやSMSログインのように、NocoBaseアプリケーション内でユーザーの身元を判断するタイプです。もう1つは、OIDCやSAMLなどの認証方法のように、サードパーティサービスがユーザーの身元を判断し、その結果をコールバックを通じてNocoBaseアプリケーションに通知するタイプです。NocoBaseにおけるこれら2つの異なる認証タイ プのプロセスは、基本的に以下のようになります。
サードパーティのコールバックに依存しない場合
- クライアントはNocoBase SDKを使用してログインインターフェース
api.auth.signIn()を呼び出し、ログインインターフェースauth:signInをリクエストします。この際、現在使用している認証器の識別子をリクエストヘッダーX-Authenticatorを介してバックエンドに渡します。 auth:signInインターフェースは、リクエストヘッダー内の認証器識別子に基づいて、認証器に対応する認証タイプに転送され、その認証タイプに登録されている認証クラスのvalidateメソッドが関連するロジック処理を実行します。- クライアントは
auth:signInインターフェースのレスポンスからユーザー情報と認証tokenを取得し、tokenをLocal Storageに保存してログインを完了します。このステップはSDK内部で自動的に処理されます。
サードパーティのコールバックに依存する場合
- クライアントは、自身で登録したインターフェース(例:
auth:getAuthUrl)を通じてサードパーティのログインURLを取得し、プロトコルに従ってアプリケーション名や認証器の識別子などの情報を渡します。 - サードパーティのURLにリダイレクトしてログインを完了します。サードパーティサービスはNocoBaseアプリケーションのコールバックインターフェース(自身で登録する必要があります。例:
auth:redirect)を呼び出し、認証結果を返します。この際、アプリケーション名や認証器の識別子などの情報も返されます。 - コールバックインターフェースメソッドは、パラメータを解析して認証器の識別子を取得し、
AuthManagerを介して対応する認証クラスを取得し、auth.signIn()メソッドを能動的に呼び出します。auth.signIn()メソッドはvalidate()メソッドを呼び出して認証ロジックを処理します。 - コールバックメソッドは認証
tokenを取得した後、302リダイレクトでフロントエンドページに戻り、URLパラメータにtokenと認証器の識別子(例:?authenticator=xxx&token=yyy)を含めます。
次に、サーバーサイドインターフェースとクライアントサイドユーザーインターフェースの登録方法について説明します。
サーバーサイド
認証インターフェース
NocoBaseのコアは、認証タイプの拡張に関する登録と管理機能を提供しています。ログインプラグインのコアロジックを拡張するには、コアの抽象クラス Auth を継承し、対応する標準インターフェースを実装する必要があります。
完全なAPIリファレンスは Auth を参照してください。
コアは、ユーザー認証に関連する基本的なリソース操作も登録しています。
ほとんどの場合、拡張されたユーザー認証タイプは、既存のJWT認証ロジックを流用して、APIにアクセスするためのユーザー認証情報を生成できます。コアの BaseAuth クラスは Auth 抽象クラスの基本的な実装を提供しています。詳細は BaseAuth を参照してください。プラグインは BaseAuth クラスを直接継承することで、一部のロジックコードを再利用し、開発コストを削減できます。
ユーザーデータ
ユーザー認証ロジックを実装する際、通常はユーザーデータの処理が伴います。NocoBaseアプリケーションでは、関連するテーブル(コレクション)はデフォルトで次のように定義されています。
通常、拡張されたログイン方法では、users と usersAuthenticators を使用して関連するユーザーデータを保存するだけで十分です。特別な場合にのみ、独自の新しいコレクションを追加する必要があります。
usersAuthenticators の主なフィールドは次のとおりです。
ユーザーのクエリおよび作成操作のために、authenticators のデータモデル AuthModel にはいくつかのメソッドがカプセル化されており、CustomAuth クラス内で this.authenticator[メソッド名] を介して使用できます。完全なAPIリファレンスは AuthModel を参照してください。
認証タイプの登録
拡張された認証方法は、認証管理モジュールに登録する必要があります。
クライアントサイド
クライアントサイドのユーザーインターフェースは、ユーザー認証プラグインのクライアントが提供するインターフェース registerType を介して登録されます。
ログインフォーム

複数の認証器に対応する認証タイプがログインフォームを登録している場合、それらはタブ形式で表示されます。タブのタイトルは、バックエンドで設定された認証器のタイトルになります。

ログインボタン

通常はサードパーティのログインボタンとして使用されますが、実際には任意のコンポーネントにすることができます。
登録フォーム

ログインページから登録ページへ遷移する必要がある場合は、ログインコンポーネント内でご自身で処理を行う必要があります。
管理設定フォーム

上部には汎用的な認証器設定があり、下部には登録可能なカスタム設定フォームの部分が表示されます。
APIリクエスト
クライアントサイドでユーザー認証関連のAPIリクエストを行うには、NocoBaseが提供するSDKを使用できます。
詳細なAPIリファレンスは @nocobase/sdk - Auth を参照してください。

