Mark Hammer's Blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

SSOのMFAをSalesforce側で実施しながらAPIログインのMFAを回避する方法の検証

はじめに

SalesforceのMFAが「契約上必須」から「機能上必須」に切り替わりそうなタイミングですが、皆様はMFA対応を進めていらっしゃいますでしょうか。
さて、SalesforceにSSO経由でログインする際もMFAが必要となりましたが、SSO経由の場合はIdP側、SP側(Salesforce)どちらかでMFA対応を行えばよいことになっています。
しかし、Salesforce側でMFA対応を行うには現状プロファイル設定にて [ログインに必要なセッションセキュリティレベル] を [高保証] に設定するしかないのですが、この設定を行うとAPIログイン時にもMFAを求められ、「ユーザ名、パスワード入力方式(Password Authentication)ではデータローダでログインできない」といった状況が発生します。

以前行った検証はこちら↓
sfblog.markhammer.net

このためSSO経由ログインを行う場合はIdP側でのMFA対応が必須と考えていました。
しかし「何か方法がないかな…」と思いながら設定画面を眺めていた時に思いついた方法で今回動作したので、その内容を書いていきます。

検証

今回は以下すべての条件を満たすことを目標にします。

  • SSO経由でSalesforceにログインした場合に、Salesforce側でMFAを行う。
  • データローダでユーザ名、パスワード入力方式(Password Authentication)のログインを行ってもMFAなしでログインできる。
  • Salesforceログイン画面経由でログインした場合はMFAを行う。

結論

以下すべての設定を行えば全条件を満たせました。

  • プロファイル設定にて [ログインに必要なセッションセキュリティレベル] を [高保証] に設定する。
  • プロファイル設定、または権限セットにて「ユーザインターフェースログインの多要素認証」権限を付与する。またはセッションの設定にて「Salesforce 組織へのすべての直接 UI ログインに多要素認証 (MFA) が必要」を有効化する。
  • セッションの設定のセッションセキュリティレベルにて「高保証」に「多要素認証」と「ユーザ名とパスワード」を設定する。

「セッションセキュリティレベル」設定画面

検証の流れ

そもそも [ログインに必要なセッションセキュリティレベル] を [高保証] にしたときにユーザ名・パスワード形式のAPIログインが失敗するのは、セッションセキュリティレベルにて「高保証」に「多要素認証」しかないことが原因です。
しかし、セッションセキュリティレベルにて「高保証」に「ユーザ名とパスワード」も設定できるのを見て、【「高保証」に「ユーザ名とパスワード」を追加すればAPIログインも成功するはず。ログイン画面経由のMFA対応は「ユーザインターフェースログインの多要素認証」権限付与でできるのでは】と思い、試してみました。
以下、試した流れです。

  • 検証①:プロファイル設定にて [ログインに必要なセッションセキュリティレベル] を [高保証] に設定し、セッションセキュリティレベルの「高保証」を「多要素認証」だけにする
    • この場合、SSOログイン時にSalesforce側でMFAを行うことは成功しましたが、データローダでユーザ名、パスワード入力方式によるログインを行うと失敗しました。(前述の投稿と同じ動作)
  • 検証②:検証①+セッションセキュリティレベルの「高保証」を「多要素認証」と「ユーザ名とパスワード」にする
    • この場合、データローダでユーザ名、パスワード入力方式によるログインは成功しましたが、Salesforceログイン画面経由でログインした場合はMFAなしになりました。
      これはセッションセキュリティレベルの「高保証」に「ユーザ名とパスワード」が追加されたため、ログイン画面経由でもMFA不要になったことが原因です。
  • 検証③:検証②+権限セットにて「ユーザインターフェースログインの多要素認証」権限を付与する
    • この場合、Salesforceログイン画面経由でログインした場合でもMFA必須になりました。
      「ユーザインターフェースログインの多要素認証」権限はログインに必要なセッションセキュリティレベルの高保証とは別枠で判断されるようです。
      この状態でデータローダログインを試すと成功し、またSSO経由ログインでもSalesforce側でMFAが必要な動作になりました。
  • 検証④:検証②+セッションの設定にて「Salesforce 組織へのすべての直接 UI ログインに多要素認証 (MFA) が必要」を有効にする
    • この方法でも検証③同様、3条件全てを満たすことができました。

注意事項

そもそもセッションセキュリティレベルの「高保証」は、このヘルプにもある通り機密情報の操作に制限をかけることを目的とした機能です。
「高保証」セッションセキュリティレベルを操作制限に使用している場合は今回の設定はおすすめできません。(実際に設定されているかは「ID検証」設定画面をご確認ください。)

また、今回はSSO経由ログイン時にMFAを求められましたが、Salesforceにとっては高保証のログイン方法でログインできればよいので、「SSO後通常のログイン画面同様ユーザ名とパスワードを求められ、入力すればMFAなしでログイン成功となる」場合がないとは言い切れません。
ただ「ユーザインターフェースログインの多要素認証」権限があるので、この場合は「通常のログイン画面同様ユーザ名とパスワードを求められる→MFAを求められる」流れになる、結果MFA対応OKになるのではないかと予想しています。
(この場合IdP側のパスワードとSalesforceのパスワード両方覚える必要があるので、手間的にNGとなりそうですが)

いずれにしても今回の検証内容はSalesforce側で今後変更されるかもしれない動作ですので、事前の検証を強くお勧めいたします。