ログインフローの例
ログインフローを使用して、ログイン操作をカスタマイズし、ビジネスプロセスを Salesforce 認証に統合できます。一般的な使用事例として、ログイン時のユーザーデータの収集と更新、多要素認証の設定、サードパーティの強力な認証方式の統合などがあります。
必要なエディション
| 使用可能なインターフェース: Salesforce Classic および Lightning Experience の両方 |
| 使用可能なエディション: Essentials Edition、Professional Edition、Enterprise Edition、Performance Edition、Unlimited Edition、および Developer Edition |
では、ログインフローの 3 つの一般的な使用事例を見てみましょう。
- ログイン時のユーザーデータの収集と更新
- カスタマイズした多要素認証 (MFA) の適用
- サードパーティの強力な認証メカニズムの統合
ログイン時のユーザーデータの収集と更新
このログインフローでユーザーに確認または更新を要求する電話番号は、ユーザーアカウントで更新されます。
- ユーザーオブジェクトを照会してユーザーの電話番号を検索します (存在する場合)。
- 電話番号を表示し、ユーザーに確認または更新するように要求します。
- 新しい番号が入力された場合は、ユーザーオブジェクトを更新します。
フローの作成
- https://help.salesforce.com/articleView?id=flow_builder.htm&language=ja に移動します。
-
ツールボックスの [マネージャー] タブで、[新規リソース] をクリックし、ユーザーの ID を保存する変数を作成します。
ログインイベントはコンテキスト属性のリストをフローに渡します。フローが開始されると、対応する属性の値が該当の入力変数に入力されます。フローでこれらの属性を使用するには、LoginFlow_ATTRIBUTE_NAME 形式を使用してローカルテキスト変数を定義します。たとえば、LoginFlow_UserId を使用して、ログインしているユーザーの ID を検証し、関連するユーザーオブジェクトを照会できます。

各変数を追加すると、[マネージャー] タブに表示されます。
次の入力変数がサポートされています。
- LoginFlow_LoginType
- LoginFlow_LoginSubType
- LoginFlow_IpAddress
- LoginFlow_UserAgent
- LoginFlow_Platform
- LoginFlow_Application
- LoginFlow_Community
- LoginFlow_SessionLevel
- LoginFlow_UserId
また、これらの属性はフローに出力属性として保存することもできます。
- LoginFlow_FinishLocation (Text 型) — この変数によって、フロー完了時のユーザーの移動先が決まります。
- LoginFlow_ForceLogout (Boolean 型) — この変数が
trueに設定されていると、ユーザーは直ちにログアウトされます。
-
[マネージャー] タブで、[新規リソース] をクリックし、ユーザー空の値を保存できるレコード変数を作成します。

-
レコード取得要素を追加して、ログインしようとしているユーザーを検索します。

-
変数に保存するユーザー項目を指定します。たとえば、Phone や MobilePhone などです。

-
記録されている電話番号の確認をユーザーに要求するためのようこそ画面を作成します。

- 画面の各電話コンポーネントのデフォルト値を設定するには、[値] を {!user} レコード変数の該当する項目に設定します。Phone の場合、これは {!user.Phone} です。携帯電話の場合は、{!user.mobilePhone} です。
-
各電話コンポーネントについてのユーザーの入力内容を保存するには、コンポーネントの [出力値を保存] セクションで、[値] を前のステップと同じ項目に設定します。
![[値] が入力および出力として設定されている電話画面コンポーネント。](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-jajp/370be09a-45e1-4269-8843-ef2e10be69eb/identity/images/LoginFlowEx_define_screencmp.png)
-
{!user} レコード変数の値を使用するレコード更新要素を追加して、ユーザーの電話番号を更新します。各電話画面コンポーネントの出力を {!user} レコード変数の項目に保存しているため、フローではユーザーを更新するためにこれらの値が使用されます。

-
要素と要素を接続します。

-
ログインフローに名前を付けて保存します。

-
ログインフローをユーザープロファイルに接続します。ベストプラクティスは、テストプロファイルを持つ専用のテストユーザーを作成することです。
メモ ログインフローが適切に動作することを確認するまで、ログインフローをシステム管理者プロファイルに関連付けないでください。そうしないと、失敗した場合にシステム管理者が組織にログインできなくなります。 - ログアウトし、テストユーザーとしてログインしてフローをテストします。
Welcome Flow の例をテストすると、Lightning Experience では次のような画面が表示されます。
多要素認証 (MFA) の設定
この例では、時間ベースのワンタイムパスワード (TOTP) 認証を Salesforce でサポートされる MFA 方式で拡張します。TOTP アルゴリズムは共有秘密鍵と現在時刻からワンタイムパスワードを計算します。
フローは次の処理を行います。
- ユーザーが未登録の場合、新しい秘密鍵を生成し、ユーザーにクイックレスポンス (QR) コードで鍵を登録するように促します。ユーザーが有効な TOTP トークンを入力すると、秘密鍵がユーザーレコードに保存されます。この鍵は、以降のログインで再利用されます。
- ユーザーが登録済みの場合、ユーザーに TOTP トークンの入力のみを促します。
ユーザーは Salesforce Authenticator や Google Authenticator などの時間ベースの認証アプリケーションを使用して QR コードをスキャンし、TOTP トークンを生成できます。
会社のロゴ、会社の色などを追加して、このフローを拡張し、ユーザー操作をカスタマイズできます。さまざまなポリシーを追加して適用することさえできます。たとえば、IP ベースの MFA プロセスを作成して、IP アドレスが特定の範囲外である場合にのみ第 2 認証要素を要求できます。
この例では TwoFactorInfo オブジェクトと Auth.SessionManagement Apex クラスを使用して、Salesforce でサポートされる標準ベースの TOTP 多要素認証をカスタマイズおよび管理します。
- 現在のユーザーの TwoFactorInfo オブジェクトを検索します。ユーザーが未登録の場合、鍵を生成します。
- ユーザーが TOTP に登録済みかどうかを判別します。
- ユーザーが登録済みの場合、ユーザーに TOTP トークンを入力するように促します。
- ユーザーが未登録の場合、ユーザーに QR コードで登録し、TOTP トークンを入力するように促します。
- TOTP トークンを検証します。トークンが有効な場合、ログインフローは完了し、ユーザーはログインします。
- TOTP トークンが無効な場合、ユーザーはステップ 2 に戻されます。
TOTP フローの設定
-
変数を作成します。
- secret – 多要素操作の秘密鍵を保存します。
- qr_url – 秘密鍵の QR コードエンコーディングの URL を保存します。
- IsTokenValid – 検証結果を保存します。
secret および qr_url は Text 変数で、IsTokenValid は Boolean 変数です。

-
TOTP に未登録のユーザーに対して新しい秘密を生成するには、Apex アクション (従来) 要素をキャンバスにドラッグし、TOTPPlugin の従来の Apex アクションを選択します。

Apex アクションとは、フローの標準機能を拡張する Apex クラスです。Apex アクションを使用して、複雑な計算、外部サービスへの API コールなどを実行できます。
TOTPPlugin は Salesforce の TOTP メソッドにアクセスし、時間ベースの秘密鍵と QR コードを生成し、TOTP を検証します。TOTPPlugin の Apex クラスは、ログインフローのサンプルパッケージから入手できます。
この従来の Apex アクションには、次の入力パラメーターがあります。
- OTP_INPUT – ユーザーが入力する TOTP トークン。
- OTP_REGISTRATION_INPUT – ユーザーが最初の登録時に入力する TOTP トークン。
- SECRET_INPUT – TOTP の生成に使用される秘密鍵。
次の出力値が返されます。
- SECRET_OUTPUT – このプラグインで生成された秘密鍵。
- QR_URL_OUTPUT – 秘密鍵の QR エンコーディング。
- IsValid_OUTPUT – 検証が成功した場合、
trueを返します。それ以外の場合はfalseを返します。
ユーザーが未登録の場合、新しい秘密鍵と QR コードを生成するようにこの TOTPPlugin のインスタンスを設定します。この場合、入力は渡されません。

秘密鍵と QR コードの URL は、secret および qr_url 変数に保存されます。

-
ユーザーを登録するための決定要素を設定します。
この決定は、secret が null かどうかを検証します。null ではない場合、ユーザーの登録が必要です。[Registration (登録)] を決定の結果として定義します。null の場合、ユーザーは登録済みであり、TOTP トークンの入力のみを要求する必要があります。デフォルトの結果のラベルを [Get TOTP (TOTP を取得)] に変更します。

-
TOTP 画面を設定します。
登録済みのユーザーは、この画面に転送され、TOTP トークンを要求されます。フローの後半で、テキストコンポーネント (OTP_input) の API 名を参照して、ユーザーが入力する TOTP トークンを使用できます。

-
登録画面を設定します。QR コードをスキャンして、TOTP クライアントアプリケーションを初期化し、TOTP トークンを入力するようユーザーに要求します。

-
ユーザーが入力する TOTP トークンを検証するには、TOTPPlugin の従来の Apex アクションの別のインスタンスを設定します。
この TOTPPlugin の従来の Apex アクションは、次の両方の使用事例をサポートしています。
- ユーザーが登録画面から移動してきます。ユーザーは QR コードをスキャンして TOTP トークンを入力する必要があります。TOTP トークンと秘密の両方が検証のために TOTPPlugin に渡されます。TOTPPlugin は秘密に対して TOTP トークンを検証します。有効な場合、秘密はユーザーレコードに登録され、以降のログインで使用されます。
- ユーザーがトークンの取得画面から移動してきます。ユーザーは登録済みであり、TOTP トークンのみを入力します。TOTP トークンは、検証のために TokenInput パラメーターを介して TOTPPlugin に渡されます。

isTokenValid パラメーターは検証状況を返し、その値は isTokenValid フロー変数に保存されます。

-
2 つのいずれかの結果で別の決定要素を設定し、ユーザーをログインするかどうかを判別します。
- IsTokenValid が
trueの場合、トークンは有効です。 - それ以外の場合、トークンは無効です。
検証が成功した場合、ユーザーはフローの最後まで進み、クリックして次のステップに移動し、アプリケーションにログインします。検証が失敗した場合、フローはユーザーをフローのステップ 2 にリダイレクトして戻します。ステップ 2 では、登録済みユーザーに新しい TOTP トークンの入力が要求されます。ユーザーが未登録の場合、ユーザーには新しい TOTP トークンの登録と入力が要求されます。

- IsTokenValid が
-
要素と要素を接続します。
- [Registration (登録)] の決定を [Registration (登録)] 画面に接続するには、[Registration (登録)] の結果を選択します。
- [Registration (登録)] の決定を [Get TOTP (TOTP を取得)] 画面に接続するには、[Get TOTP (TOTP を取得)] の結果を選択します。
- [ログイン] の決定を [Registration (登録)] の決定に接続するには、[Token is invalid (トークンは無効)] の結果を選択します。
- ログインフローを保存し、有効化し、ユーザープロファイルに接続します。
サードパーティの強力な認証方式の統合
ログインフローを使用すると、API を使用して外部のサードパーティ認証プロバイダーとやりとりすることができます。
たとえば、Yubico は YubiKey という物理的なセキュリティキーを使用する強力な認証を提供しています。Yubico はまた、GitHub で Apex ライブラリとログインフローの例も提供しています。このライブラリには、YubiKey ワンタイムパスワード (OTP) を検証するための Apex クラスが含まれています。これらのクラスを使用すると、Salesforce ユーザーは、ログイン時の第 2 認証要素として YubiKey を使用できます。詳細は、yubikey-salesforce-client を参照してください。
Twilio や TeleSign のようなサードパーティの SMS または音声配信サービスを導入して、SMS ベースの多要素認証と ID 検証フローを実装することもできます。詳細は、「サードパーティの SMS ベースの多要素認証のリリース」を参照してください。
ログインフローのサンプルパッケージ
ログインフローのサンプルパッケージは、さまざまなログインフローのサンプルを Salesforce 組織にインストールする未管理パッケージです。次の例が含まれています。
- Email Confirmation (メール確認) – 確認コードを含むメールを送信する。
- SF-TOTP – TOTP 多要素認証を有効にする。
- Conditional Multi–Factor (条件付き多要素) – 信頼できる IP アドレスからアクセスしているユーザーについては多要素認証をスキップする。
- Device Activation (デバイスの有効化) – メールまたは多要素認証を使用してユーザー ID を確認する。
- Accept Terms of Service (サービス利用規約への同意) – 続行する前にユーザーに利用規約への同意を要求する。
