ログインフローによる同時セッション数の制限
ログインフローを使用して、ユーザあたりの同時 Salesforce セッション数を制限できます。
同時セッションパッケージのインストール
同時セッションの未管理パッケージには、ログインフローソリューションの要素およびソースが含まれています。このパッケージには、ユーザの同時セッション数を取得するプラグインが含まれています。待機中のログインが同時セッション制限を超えた場合、フローによってブロックされます。
パッケージはカスタマイズできます。たとえば、セッション制限を変更できます。デフォルトでは、パッケージのセッション制限は 1 です。
- 同時セッションパッケージをインストールするには、https://login.salesforce.com/packaging/installPackage.apexp?p0=04to0000000WR73 に移動します。
- パッケージをインストールしたら、ログインフローをユーザプロファイルに接続できます。同時セッションを制限するプロファイルにフローを割り当てます。
パッケージコンポーネントの作成
同時セッションパッケージのコンポーネントを詳しく見てみましょう。パッケージを見つけられなかった場合は、ここに示す方法でプラグインおよびログインフローを作成できます。
SessionPlugin は、同時セッション数を取得する Apex クラスです。このクラスは AuthSession テーブルを照会し、一時的なセッションを除くセッションの数を合計します。
- [設定] から、[クイック検索] ボックスに「Apex クラス」と入力し、[Apex クラス] を選択します。
- クラスを作成するには、[新規] をクリックします。
- 次のコードをコピーして Apex クラスコンテンツとして貼り付けます。
1global class SessionPlugin implements Process.Plugin 2{ 3 global Process.PluginDescribeResult describe() 4 { 5 Process.PluginDescribeResult result = new Process.PluginDescribeResult(); 6 result.description='This plug-in returns the no of concurrent sessions for the current user'; 7 result.tag='Identity'; 8 9 result.inputParameters = new List<Process.PluginDescribeResult.InputParameter> { 10 }; 11 12 result.outputParameters = new List<Process.PluginDescribeResult.OutputParameter> { 13 new Process.PluginDescribeResult.OutputParameter('CONCURRENT_NO', 14 Process.PluginDescribeResult.ParameterType.INTEGER) 15 }; 16 17 return result; 18 } 19 20 global Process.PluginResult invoke(Process.PluginRequest request) 21 { 22 Map<String, Object> result = new Map<String, Object>(); 23 List<AuthSession> sessions; 24 Integer no = 0; 25 26 String userid = UserInfo.getUserId(); 27 28 sessions = [Select Id, ParentId, SessionType from AuthSession where UsersId=:userid]; 29 for (AuthSession s : sessions) 30 { 31 // Count only parent and non-temp sessions 32 if(s.ParentId == null && s.SessionType != 'TempUIFrontdoor' ) 33 { 34 no++; 35 } 36 } 37 38 result.put('CONCURRENT_NO', no); 39 40 return new Process.PluginResult(result); 41 } 42}
ログインフローの作成
パッケージのログインフローには次の要素が含まれています。
- SessionPlugin — 同時セッション数を照会する Apex プラグイン。
- 決定 — 同時セッション数が制限を超えているかどうかを確認します。この結果によって、ログインをブロックするか許可するかを決定します。
- ブロック画面 — ログインが制限を超えた場合、フローによってブロック画面要素が表示されます。
- 割り当て — ログインが制限を超えた場合、この要素は LoginFlow_ForceLogout 変数を true に割り当て、ログインできないようにします。
- ダミー画面 — この要素はプレースホルダです。フローには、出力変数に従う UI 要素が必要です。
- Flow Builder を開きます。[設定] で、[クイック検索] ボックスに「フロー」と入力して、[フロー] を選択し、[新規フロー] をクリックします。
- ツールボックスから、[マネージャ] タブを開いて [新規リソース] をクリックします。LoginFlow_ForceLogout 出力 Boolean 変数を作成します。この変数が true に設定されていると、ログイン試行はブロックされます。
- ユーザに許可する同時セッション数を保存する数値変数を作成します。
- ツールボックスから、[要素] タブを開きます。[Apex アクション (従来)] 要素をキャンバスにドラッグし、SessionPlugin 従来の Apex アクションを選択します。アクションの CONCURRENT_NO パラメータを session_no フロー変数に保存します。
- 2 つの結果を持つ決定要素を追加します。ログインが制限を超えた場合、結果はデフォルトである Block になります。それ以外の場合、結果は Allow になります。
- 許可されている同時セッション数を超えていることをユーザに知らせる画面要素を追加します。
-
LoginFlow_ForceLogout 出力変数を true に設定する割り当て要素を追加します。
- コンテンツのない画面を追加します。
- 要素と要素を接続します。決定を最初の画面に追加するときに、Block の結果を選択します。
- フローを保存します。
- フローを有効化します。
- ログインフローをプロファイルに接続します。ベストプラクティスは、テストプロファイルを持つ専用のテストユーザを作成することです。
- ログアウトし、テストユーザとしてログインしてフローをテストします。
プロファイルをユーザに割り当てると、Salesforce はフローによってログイン時にユーザをリダイレクトします。ログイン試行が制限を超えた場合、ユーザにブロック画面が表示され、ログインできなくなります。Lightning Experience のブロック画面の例を次に示します。