React SDK
@keenauth/react は、埋め込み可能なサインイン、サインアップ、アカウントのコンポーネントと、その基盤となるフックを提供します。ブラウザコアの @keenauth/js 上で動作し、ネットワーク呼び出し、PKCE、DPoP、WebAuthn のセレモニーはすべてこのコアが行います。コンポーネントが fetch や WebCrypto を直接呼び出すことはありません。このパッケージはまだ npm に公開されていません。
ホスト型ログインページへのリダイレクトによるサインインを行う場合、このパッケージは必要ありません。@keenauth/js を直接使用する React クイックスタート を参照してください。
プロバイダーのセットアップ
コアを一度作成し、KeenAuthProvider に渡します。コンポーネントがサーバーのエラーを認識できるように、React パッケージのエラークラスをコアに渡します。
import { KeenAuth } from "@keenauth/js";
import { KeenAuthProblemError, KeenAuthProvider, SignIn } from "@keenauth/react";
const core = new KeenAuth({
issuer: "https://acme.eu.keenauth.app",
clientId: "app_01j9zzzzzzzzzzzzzzzzzzzz",
redirectUri: "https://login.acme.example/callback",
createProblemError: (problem) => new KeenAuthProblemError(problem),
});
export function App() {
return (
<KeenAuthProvider core={core} locale="en">
<SignIn transaction={{ client_id: "app_01j9zzzzzzzzzzzzzzzzzzzz", redirect_uri: "https://login.acme.example/callback" }} />
</KeenAuthProvider>
);
}
KeenAuthProvider には次のプロパティを指定します。
| プロパティ | 意味 |
|---|---|
core |
@keenauth/js のクライアント(KeenAuthCore の契約を実装した任意のオブジェクト) |
locale |
UI の言語(BCP 47)。既定値は en |
appearance |
任意のテーマ上書き設定。外観 を参照してください |
コンポーネントは、環境の Cookie と CSRF ヘッダーを付けてフロント API(/fapi/v1)を呼び出します。サーバーは、この呼び出しを環境自身のログインオリジンからのみ、かつファーストパーティのアプリケーションに対してのみ受け付けます。
コンポーネント
| コンポーネント | 役割 |
|---|---|
SignIn |
ID 優先のサインイン。パスワード、パスキー、メールの認証コードまたはマジックリンク、および第二要素を扱います |
SignUp |
環境の登録設定に基づくサインアップ |
UserProfile |
サインイン中のユーザーのプロフィール、メール(認証コードによる検証を含む)、パスキー、セッション |
SignIn と SignUp は、サインイン トランザクションを開始するボディである transaction を受け取ります。
- リダイレクトフローでは、認可リクエストから得た
{ authorization_request: "azr_…" }。 - リダイレクトを使わない場合は、登録済みのリダイレクト URI を含む
{ client_id, redirect_uri }。
onComplete は、コアがページ内でトランザクションを完了したときに呼び出されます。リダイレクトフローでは、代わりにページが遷移します。コンポーネントが描画しないステップ(チャレンジや組織の選択など)は、ホスト型ログインページで続行するためのリンクになります。
UserProfile は sections を受け取ります。これは profile、emails、passkeys、sessions のうち一部を指定するもので、既定ではすべてが対象です。別の場所で行われた変更と競合するプロフィールの更新は、エラーを表示し、現在の値を再読み込みします。
フック
| フック | 返り値 |
|---|---|
useKeenAuth() |
プロバイダーの値:core、locale、appearance |
useEnvironment() |
環境のサインイン設定と、有効なロケールのテキストを参照する t |
useTransaction() |
コアの transactions API を用いたトランザクションのステートマシン |
useMe() |
サインイン中のユーザーのプロフィールとアカウント API |
外観
appearance.variables はテーマトークン(例:color.primary)を上書きします。これらは CSSOM を通じてコンポーネントのルートに --idp-* のカスタムプロパティとして書き込まれるため、'unsafe-inline' を含まない厳格なコンテンツセキュリティポリシーでも動作します。appearance.elements は、コンポーネントの要素に独自のクラス名を追加します。パッケージにはスタイルシートが含まれていません。idp-* クラスのスタイルは、ご自身の CSS で指定してください。
<KeenAuthProvider core={core} appearance={{ variables: { "color.primary": "#1f6feb" }, elements: { buttonPrimary: "acme-button" } }}>
言語とアクセシビリティ
- コンポーネントには、英語、トルコ語、フランス語、ドイツ語、韓国語、日本語、イタリア語、スペイン語のテキストが含まれます。環境のテキスト上書き設定が優先されます。それ以外のロケールでは英語にフォールバックしますが、テキストの方向はそのロケールに従います。
- すべての入力項目にラベルがあり、エラーの概要はフォーカスを受け取り、
autocompleteの値が設定され、貼り付けがブロックされることはありません。
パスキー
パスキーのボタンは、パスキーの Relying Party ID がページのホストを対象とする場合に表示されます(またはページのオリジンが環境の関連オリジンである場合に表示されます)。それ以外の場合、コンポーネントはホスト型ログインページへのリンクを表示します。パスキーには安全なコンテキスト(https または localhost)が必要です。
現在の制限事項
- ソーシャルサインインのボタンはまだ描画されません。ソーシャルサインインを提供している環境では、ホスト型ログインページへのリンクが表示されます。
- 電話番号はまだ利用できません。
UserProfileには電話番号のセクションがありません。 - 組織のコンポーネント(組織の切り替えとプロフィール)はまだ利用できません。