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

Newer Version Available

This content describes an older version of this product. View Latest

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 サイトにアクセスできるかによって異なります。