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