マジックリンク認証
ワンタイムトークンを使用して、パスワードレスサインイン、招待制の登録、組織メンバーの招待でマジックリンクを実装する方法を学びましょう。
ワンタイムトークンを使用して、パスワードレスサインイン、招待制の登録、組織メンバーの招待でマジックリンクを実装する方法を学びましょう。
マジックリンクは、ユーザーがメール(またはSMS)で一度きりのログインURLを受け取り、クリックするとパスワードを必要とせずにログインできるパスワードレス認証方法です。
マジックリンクの主なセキュリティ機能は次のとおりです:
マジックリンクは次のように構成されます:
例として、マジックリンクは次のようになります:
マジックリンクを作成するには、一度限りのトークンを生成し、それをユーザーに安全に送信し、リンクをクリックしたときにそれを検証する必要があります。
Logto Management API を使用して一度限りのトークンを作成します。
サンプルリクエストボディペイロード:
一度限りのトークンを取得したら、エンドユーザーのメールアドレスにマジックリンクを送ることができます。マジックリンクには少なくともトークンとユーザーのメールをパラメータとして含め、あなたのアプリケーションのランディングページに移動する必要があります。例:https://yourapp.com/landing-page。
マジックリンクの単純な例として、次のようになります:
注意:
マジックリンクのパラメータ名は完全にカスタマイズ可能です。アプリケーションの要件に基づいて追加情報を加えることができ、すべてのURLパラメータをエンコードすることができます。
エンドユーザーがマジックリンクをクリックしてあなたのアプリケーションに移動した後、tokenおよびemailパラメータをURLから抽出し、Logto SDKのsignIn()関数を呼び出して認証フローをトリガーします。
詳細については、Logto Docs - マジックリンク(ワンタイムトークン)をご覧ください。
マジックリンクは第1要素認証を置き換えることができますが、多要素認証(MFA)を回避することはできません。
Logtoでは、ワンタイムトークンでマジックリンクを生成するとき、サインインかサインアップかを指定する必要はありません。メールの登録状況に基づいて自動的にフローを決定します:
Logtoは以下のシナリオでのマジックリンクをサポートします:
現在サポートされていないもの:
さらにカスタマイズが必要な場合はお知らせください。
新しい製品(例:AIツール)の内部テストや内部ツール用に、公開登録を無効にし、特定のユーザーのみがあなたのアプリにアクセスできるようにしたい場合があります。Logtoでこれを実装するには:
Console > Sign-in experience > Sign-in and sign-up > Advanced options に移動し、「Enable user registration」をオフにして公開登録を無効にします。

招待したいユーザーのメールアドレスを収集します(例:ウェブサイト経由または既存ユーザーの推薦)。
上記で説明した通りにマジック招待リンクを作成し送信します(一度限りのトークンをリクエストし、マジックリンクを作成し、Logto SDKを介して認証をトリガー)。
注意: 招待リンクの有効期限を設定してください。リンクを少なくとも1日有効とすることをお勧めします。 次のリクエストボディを使用して一度限りのトークンを生成します:
ユーザーのメールにマジックリンクを送信します(例:https://yourapp.com/landing-page?type=registrationInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected])。メールテンプレートをカスタマイズします、例えば:

ユーザーが「招待を受ける」をクリックすると、公開登録が無効化されていても自動的にサービスに登録されます。これを「ターゲットユーザー招待」と呼びます。
マルチテナント製品(例:SaaSアプリ、Slack、GitHub、Vercelなど)用として、組織メンバーシップを管理するためのシームレスなメンバー招待プロセスを提供します。マジックリンクを使用してメンバーの招待における高いコンバージョン率を確保します。
Logto Docsに従って組織の作成、組織の役割ベースのアクセス制御、組織管理を実装します:Logto Organizations。
プロダクトにおいて**"Invite members"**ワークフローを設定します。例:

このガイドに従って組織メンバーを招待します。 注意: メンバーを招待するとき、リクエストペイロードに以下を含めることを確認してください:
context: jitOrganizationIds**でユーザーが参加する組織を指定します。expiresIn**時間を長めに設定します(例:2日間または1週間)。ペイロードの例:
ユーザーのメールに招待リンクを送信します(例:https://yourapp.com/landing-page?type=organizationMemberInvitation&token=YHwbXSXxQfL02IoxFqr1hGvkB13uTqcd&[email protected])。メールテンプレートをカスタマイズします、例えば:

ユーザーが**"招待を受ける"**をクリックすると、サインインまたはサインアップされ、自動的に組織に参加します。
ユーザーが既にサインインしていて、他のマジックリンクをクリックした場合はどうなりますか?
アカウントの競合を正しく処理するには、次のことを確認してください:
login を追加しない: サインインのプロンプトにloginを含めないようにしてください。不適切に設定されている場合、Logtoは競合のアカウント切り替えプロンプトをバイパスして、マジックリンクトークンに関連付けられたアカウントに自動的にサインインしてしまいます。signIn()関数を呼び出す際、clearTokens: falseパラメータを指定して既存のトークンをクリアするのを防ぐ。このオプションを使用する場合、手動でトークンをクリアすることをログインコールバックページで確認してください。正しく設定された後のユーザーエクスペリエンスは次のようになります:

無効なマジックリンクをユーザーがクリックすると、問題の明確な説明が表示されるエラーページにリダイレクトされます。考えられるエラーシナリオとそのメッセージは以下の通りです:
| 名前 | 説明 |
|---|---|
| token_not_found | 与えられたメールとトークンでアクティブなトークンが見つかりません。 |
| email_mismatch | 与えられたトークンとメールが一致しません。 |
| token_expired | トークンの有効期限が切れています。 |
| token_consumed | トークンが消費されました。 |
| token_revoked | トークンが無効化されました。 |
| cannot_reactivate_token | トークンを再有効化できません。 |
各エラーページには具体的なメッセージが表示され、ユーザーが無効なマジックリンクの理由を理解し、次のステップについてガイドします。例:

Logtoは、エンタープライズレベルのセキュリティを持つ柔軟なパスワードレスサインインフローをマジックリンクで提供します。これは、組織にユーザーを招待したり、アカウントを楽に作成させたり、煩わしさのない認証を提供したりするためのシンプルでありながら強力な方法です。また、Logtoはアカウントの競合や期限切れのトークンなどの難しい状況を処理するため、ユーザーは常に安全でストレスのないプロセスを享受できます。
防弾認証であなたのIAMをモダナイズする準備はできましたか?