この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

LoginDiscoveryHandler インターフェース

Salesforce では、ユーザー名とパスワード以外の確認方法に基づくユーザーのログイン機能が提供されます。たとえば、メール、電話番号、または別の ID (統合 ID やデバイス識別子など) を使用してログインするようにユーザーに要求できます。Login Discovery は、Customer Community、Customer Community Plus、External Identity、Partner Community、Partner Community Plus ライセンスで使用可能です。

名前空間

Auth

使用方法

インタビューベースのログイン用の Auth.LoginDiscoveryHandler を実装します。このハンドラーは、入力された ID からユーザーを検索し、Site.passwordlessLogin をコールして、使用するログイン情報 (メール、SMS など) を決定できます。または、ハンドラーはユーザーをログイン用のサードパーティ ID プロバイダーにリダイレクトできます。このハンドラーを使用した場合、ログインページにパスワード項目は表示されません。ただし、Site.passwordlessLogin を使用して、パスワードを要求できます。

ユーザーの観点では、ユーザーはログイン画面で ID を入力します。次に、PIN またはパスワードを入力してログインを完了します。または、SSO が有効になっている場合、ユーザーはログインをスキップします。

例については、「LoginDiscoveryHandler の実装例」を参照してください。詳細は、Salesforce ヘルプ「Salesforce Customer Identity」を参照してください。

LoginDiscoveryHandler メソッド

LoginDiscoveryHandler のメソッドは次のようになります。

login(identifier, startUrl, requestAttributes)

メールや電話番号などの識別子が指定された顧客またはパートナーのログインを行います。成功した場合、開始 URL で指定された Experience Cloud サイトページにユーザーをリダイレクトします。

署名

public System.PageReference login(String identifier, String startUrl, Map<String,String>requestAttributes)

パラメーター

identifier
型: String
ログイン画面で顧客またはパートナーが入力した識別子 (メールアドレスや電話番号など)。
startUrl
型: String
顧客またはパートナーが要求した Experience Cloud サイトページへのパス。ログインが成功すると、ユーザーはこの場所にリダイレクトされます。
requestAttributes
型: Map<String,String>
ログインページにアクセスしたときのユーザーのブラウザー状態に基づくログイン要求に関する情報。requestAttributes は、CommunityUrl、IpAddress、UserAgent、Platform、Application、City、Country、Subdivision の値を渡します。City、Country、Subdivision の値は IP 地理位置情報から取得されます。

戻り値

型: System.PageReference

ユーザーがリダイレクトされるページの URL。

次に requestAttributes のサンプル応答を示します。

LoginDiscoveryHandler の実装例

この Apex コード例は Auth.LoginDiscoveryHandler インターフェースを実装します。ログインページで提供された ID に応じて、ログインしているユーザーのメールまたは電話番号が検証済みかどうかをチェックします。検証済みの場合 (Auth.VerificationMethod.EMAIL または Auth.VerificationMethod.SMS)、ID (ユーザーのメールアドレスまたはモバイルデバイス) にチャレンジを送信します。検証ページでユーザーがコードを正しく入力すると、ユーザーは開始 URL で指定された Experience Cloud サイトのページにリダイレクトされます。ユーザーが検証されない場合、ユーザーはログインのためのパスワードを入力する必要があります。また、ハンドラーは users.size()==1 のコードによってメールアドレスと電話番号が一意であることも確認します。

パスワードなしのログインは検証済みの方法でのみ機能します。ユーザーオブジェクトの検証状態は、ユーザーリストビュー、レポート、API などを使用して確認できます。使用するソリューションで、ユーザーに検証方法がない場合の処理が行われることを確認してください。このコード例では、パスワードに戻ります。

デフォルトの検出可能ログインハンドラーは、ユーザーが有効なメールアドレスまたは電話番号を入力したかを確認してからユーザーを検証ページにリダイレクトします。無効な入力が行われた場合には、ハンドラーはエラーを返します。この動作はユーザー列挙攻撃に対して脆弱であるため、必ずソリューションでこの攻撃を防げるようにします。たとえば、検証ページに似たダミーページを作成し、無効なユーザーが入力されたらユーザーをダミーページにリダイレクトすることができます。また、追加情報を与えないように、一般的なエラーメッセージを使用します。

メモ

discoveryResult 関数は Site.passwordlessLogin メソッドをコールし、指定された検証方法でユーザーをログインします。getSsoRedirect 関数は、ユーザーが SAML または認証プロバイダーのどちらを使用してログインするかを参照します。実装に固有のロジックを追加して、この参照方法を操作します。

コード例: プロファイルによるログイン検出のユーザーの絞り込み

本番組織では、同じ検証済みメールアドレスと携帯電話番号を持つ複数のユーザーが存在することが可能です。ただし、顧客は一意のユーザーしか持てません。この問題に対処するには、固有性を確保するために数行のコードを追加し、ユーザーをプロファイルで絞り込めるようにします。このコード例では、外部 ID ユーザープロファイルを持つユーザーが処理されますが、他のユースケースをサポートするように調整できます。たとえば、他のユーザーライセンスまたは基準を持つユーザーに対応するようにコードの最初の行を変更できます。

Login Discovery は、Customer Community、Customer Community Plus、External Identity、Partner Community、Partner Community Plus ユーザーライセンスで使用可能です。これは、どのプロファイルが Experience Cloud サイトにアクセスできるかによって異なります。