Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

ログインの失敗を処理およびトラブルシューティングするためのベストプラクティス

公開日: Oct 13, 2022
説明
Salesforce へのログインの失敗はさまざまな原因で発生する可能性があります。過剰なログインの失敗は、組織のパフォーマンス、ユーザの操作性に影響し、最悪のケースでは一時的に IP がブロックされる場合もあります。この記事では、過剰なログインの失敗を招くシナリオを処理するときのベストプラクティスについて説明します。
解決策

Salesforce 組織へのアクセスには、ユーザログインが必要です。これには、ブラウザでの通常の Salesforce アプリケーションアクセス、Salesforce1 での組織へのアクセス、API コールを介したプログラムでの組織へのアクセスなど、すべてのアクセスが含まれます。ログインは、無効なログイン情報、またはユーザ権限や組織権限のような組織レベルの問題など、さまざまな原因で失敗する可能性があります。1 回のログインの失敗ではオーバーヘッドはそれほど発生しませんが、同時に多くの失敗が繰り返されると、ユーザの操作性が低下する可能性があります。

ログインの失敗が一般的なシステムパフォーマンスに影響していると判断された場合、最悪のケースでは問題を軽減するために失敗したログイン要求を実行している IP が一時的にブロックされることがあります。この一時的なブロックによって、同じ IP からの有効なログインもブロックされるため、このような状態になる前に過剰なログインの失敗の問題を修正する必要があります。

この記事では、ログインが設計どおりに機能するためにできることと、多数のログインの失敗が発生しないようにするためにできることについて説明します。
 

パスワード有効期限設定の管理

予期しないログインの失敗の最も一般的な原因の 1 つはパスワードの有効期限です。有効期限の切れたパスワードでログインしようとすると、「INVALID_OPERATION_WITH_EXPIRED_PASSWORD」(「The users password has expired, you must call SetPassword before attempting any other API operations (ユーザのパスワードの有効期限が切れているため、他の API 操作を試行する前に SetPassword をコールする必要があります)」) というエラーが表示されます。

このタイプのログインの失敗を適切に処理するには、インテグレーションコードを記述する必要がありますが (以下の「ログインエラーの確認および処理」を参照)、特定のユーザプロファイルのパスワードの有効期限が切れないように組織を設定する方法があります。プロファイルの [システム管理者権限] セクションの [パスワード無期限] 設定を有効にすると、そのプロファイルを使用しているすべてのユーザのパスワードの有効期限が切れなくなります。[設定]、[ユーザの管理]、[プロファイル] からプロファイルの設定にアクセスできます。

インテグレーションユーザの新規プロファイルを作成する一般的な方法は、必要に応じて標準プロファイルからコピーして、[パスワード無期限] 設定を有効にすることです。このアプローチを使用すると、パスワードの有効期限切れによるログインの失敗を簡単に回避できます。

パスワードとプロファイルについての詳細は、「パスワードについて」 および「プロファイルの概要」 を参照してください。

 

ログインエラーの確認および処理

ログインの失敗の原因はさまざまです。コードの記述やプロセスの追加で、ログインの失敗の背後にあるさまざまな原因を処理する代わりに、ログインを再試行し、これをログインが成功するか、ログインの失敗のしきい値に達するまで繰り返すという簡単な解決策があります。

このアプローチは、エラー処理を簡略化できますが、余分なログインで不要なオーバーヘッドが発生し、実際の問題をユーザに通知できない可能性があります。ユーザのパスワードの有効期限が切れたことを報告してユーザを適切なページに転送するのではなく、ログイン試行回数が 10 回に達したときに中断するシステムの場合、組織のパフォーマンスヒットが増えると同時にユーザの操作性が低下します。

代わりに、適切なログインエラー処理をアプリケーションまたはプロセスに追加します。Salesforce では、ログインの失敗に対する詳細な応答が提供されるため、その応答情報を使用してどのような不具合があるのかを正確に把握できます。Salesforce へのログインに使用しているインターフェースに応じて、応答のエラーを確認するか、同様にエラーが含まれる例外をキャッチする必要があります。次に、SOAP API login() コールのログインエラー処理の要約例を示します。

try { 
   // Using binding already set up, log in
   LoginResult = binding.login(username, password);
   // Process successful LoginResult
   ... 
} catch (LoginFault loginFault) { 
   ExceptionCode exCode = loginFault.getExceptionCode();
   if (exCode == ExceptionCode.PASSWORD_LOCKOUT) {
       // User login has exceeded number of failed password attempts
       // Provide details to user or log 
       String errMsg = loginFault.getMessage();
       ...
       // Exit and do not re-attempt to login with this user
       ...
   }
   if (exCode == ExceptionCode.INVALID_LOGIN) {
       // Invalid password or credentials
       // Provide details to user or log
       String errMsg = loginFault.getMessage();
       ...
       // Have user provide correct credentials and re-attempt login
       ...
   }
   // Process other possible errors
   ...
}
 

エラーコードの完全なリストについては、『SOAP API 開発者ガイド』の「ExceptionCode」 を参照してください。

REST ベースの API を使用していて、ログインしようとすると 400 レベルのエラーが発生する場合、応答データで「errorCode」と「message」の詳細を確認できます。JSON 応答は次のようになります。

 
{
 "message" : "Invalid username, password, security token",
 "errorCode" : "INVALID_LOGIN"
}
 

REST API のエラー応答についての詳細は、『REST API 開発者ガイド』の「状況コードとエラー応答」 を参照してください。

 

ログインの失敗の追跡とインテグレーションジョブ間のログインセッションの再利用

ログインの失敗時にログインエラーに対処できないことがあります。エラー時にユーザによる操作ができない独自のシステムで複数のインテグレーションジョブが実行されている場合、ログインエラーが発生すると、インテグレーションジョブが失敗しますが、そのログインエラーを修正または通知する方法がないため、次のインテグレーションジョブが完了してしまい、インテグレーションジョブごとに多くのログインエラーが繰り返される可能性があります。

このような場合、外部キューを使用して現在使用中のユーザログインセッションを追跡できます。各インテグレーションジョブでこのキューをチェックし、すでにログインされているセッションを再利用できます。また、復旧できないログインエラーが発生した場合、ジョブでキューのセッションを削除するか、セッション/ユーザ ID をログインに対して無効になったものとしてマークできます。このキューを使用して、ユーザログインが機能しないことを次のジョブに通知できるため、後続のインテグレーションジョブで、機能しないログイン ID を使用してログインを試行し続けることがなくなります。

 

セッション ID の取得とキャッシュ

ログインの成功の応答の一部としてセッション ID を取得します。Force.comWeb Services Connector (WSC) などを使用している場合、セッション ID の取得および再利用を自動的に処理できます。REST ベースの Salesforce API を使用している場合、OAuth 認証プロセスの一部としてセッション ID を受信します。このセッション ID は、後続のトランザクションのためにキャッシュして再利用する必要があります。

関連するユーザアクティビティがない場合、設定可能なタイムアウト時間が経過するとセッション ID の有効期限が切れますが、更新して再利用できるため、再度ログインして認証する必要はありません。

 

有効期限の切れたセッションの確認

トランザクションの応答を確認して、セッションの有効期限が切れているかどうかを判断できます。セッションの有効期限が切れている場合、応答に「セッションは終了しました」または「セッションが無効です」という「INVALID_SESSION_ID」エラーが表示されます。次に、有効期限の切れたセッションの例外をキャッチする SOAP API を使用した簡単な Java の例を示します。

 
try { 
   // Salesforce transaction using current session
   ... 
} catch (UnexpectedErrorFault uef) { 
   if (uef.ExceptionCode == ExceptionCode.INVALID_SESSION_ID) { 
       // Try and refresh the user session 
       ...
   } 
}
 

セッション ID の更新

セッション ID の有効期限が切れたときに OAuth を使用して認証する場合、OAuth を使用してトークンの更新を要求できます。クライアントは、セッション ID とクライアント ID およびクライアントの秘密 (アプリケーション/クライアントの接続アプリケーション 設定で定義) を使用して OAuth POST 要求を送信し、新しいトランザクションに使用できる更新済みのセッション ID を受信します。

OAuth の使用やセッション ID の更新についての詳細は、「OAuth 2.0 更新トークンフロー」および「Force.com の OAuth 2.0 の詳細の説明」 を参照してください。

 

API アクセス権限の確認と API 制限の監視

ログインユーザ名とパスワードの情報が API アクセスで使用される場合、これらの情報が正しくても、誤った API 権限や組織の API 制限が原因でログインに失敗する可能性があります。

API アクセスがサポートされていない組織に接続しようとすると、「API_DISABLED_FOR_ORG」というエラーが発生します。組織の API アクセス権は、Salesforce のエディションの種類によって決まります。API アクセス権は、Enterprise Edition、Unlimited Edition、Performance Edition、Developer Edition の組織で使用できます。組織に API アクセス権があるのに「API_DISABLED_FOR_ORG」というエラーが発生する場合は、Salesforce サポートにお問い合わせください。

API アクセス権のないユーザとしてログインしようとすると、「API_CURRENTLY_DISABLED」(「API はこのユーザに対して無効化されています」というエラーが発生します。システム管理者は、Salesforce のエディションの API アクセス制御の他に、ユーザプロファイルの [API の有効化] 設定 ([設定]、[ユーザの管理]、[プロファイル] にある) を有効または無効にしてさらに API アクセスを制限できます。組織への API アクセスが必要なユーザが、[API の有効化] が有効になっているユーザプロファイルを使用していることを確認します。

また、Salesforce では、24 時間でコール可能な API コール数 (プログラムによるログインを含む) の制限を設定することもできます。これは、Salesforce のエディションの種類に基づいています。エディションの種類の 24 時間あたりのコール数を超えると、ログインに失敗し、要求制限に達したことが示される場合があります。エディションの種類ごとの実際の制限については、『SOAP API 開発者ガイド』の「実装に関する考慮事項」 を参照してください。

 

セキュリティトークンの確認

Salesforce では、ログインでユーザ ID、パスワード、セキュリティトークンを提供することを要求して、API ログインのユーザのログイン情報をさらに検証できます。Salesforce 組織の設定方法によっては、ログインの一部としてセキュリティトークンを含めることが必要な場合もあります。

API アクセスでログインする場合、ログイン情報を提供するときにセキュリティトークンをパスワードに追加する必要があります。このようにしないと、「LOGIN_MUST_USE_SECURITY_TOKEN」というエラーが発生します。ただし、信頼済み IP 範囲 を使用するように組織を設定していて、登録されている IP アドレスからログインをコールする場合、セキュリティトークンを追加する必要はありません。

Salesforce では、各ユーザのセキュリティトークンが生成されます。セキュリティ上の理由により、Salesforce ではトークンは保存されず、代わりにメールでトークンがユーザに通知されます。そのため、セキュリティトークンの管理責任者はユーザになります。また、ユーザがパスワードを変更すると、Salesforce によって新しいセキュリティトークンが生成され、新しいメールが送信されます。

無効なセキュリティトークンが原因でログインに失敗した場合、ユーザは必要に応じて [設定]、[私の個人情報]、[私のセキュリティトークンのリセット] に移動し、Salesforce で新しいセキュリティトークンが生成されるようにします。詳細は、「セキュリティトークンのリセット」を参照してください。

ログインプロセスでどのようにセキュリティトークンが使用されるのかについての詳細は、『SOAP API 開発者ガイド』の「セキュリティと API」 の「セキュリティトークン」を参照してください。

「セキュリティと認証について」Trailhead
シングルサインオン実装のベストプラクティスとヒント
ナレッジ記事番号

000386825

 
読み込み中
Salesforce Help | Article