login()
構文
LoginResult = connection.login(string username, string password);使用方法
login() コールを使用して、ログインサーバーにログインし、クライアントセッションを開始します。クライアントアプリケーションは、他の API コールを行う前に、ログインし、sessionId とサーバー URL を取得します。
クライアントアプリケーションは、login() コールを呼び出すとき、ログイン情報としてユーザー名とパスワードを渡します。呼び出し時に、API がログイン情報を認証します。後続のすべての API コールで使用する、sessionId、ログインユーザー名に関連付けられているユーザー ID、および Lightning プラットフォーム API を指す URL を返します。
Salesforce は、クライアントアプリケーションがログインしている IP アドレスを確認し、不明な IP アドレスからのログインをブロックします。API でブロックされたログインに関しては、Salesforce がログイン失敗エラーを返します。ログインするには、ユーザーがセキュリティトークンをユーザーパスワードの末尾に追加する必要があります。たとえば、パスワードが mypassword で、セキュリティトークンが XXXXXXXXXX の場合は、「mypasswordXXXXXXXXXX」と入力する必要があります。セキュリティトークンを取得するには、Salesforce ユーザーインターフェースからパスワードを変更するか、セキュリティトークンをリセットします。ユーザーがパスワードを変更するか、セキュリティトークンをリセットすると、ユーザーの Salesforce レコードに指定されたメールアドレス宛に新しいセキュリティトークンが送信されます。セキュリティトークンは、ユーザーがセキュリティトークンをリセットするか、パスワードを変更するか、またはユーザーのパスワードがリセットされるまで有効です。トークンが無効な場合、ユーザーはログインプロセスを再度行う必要があります。再度ログインを行わないようにするには、クライアントの IP アドレスを組織の信頼できる IP アドレスのリストに追加します。詳細は、「セキュリティトークン」を参照してください。
ログイン後、クライアントアプリケーションで次のタスクが実行されていることを確認します。
- API がこのセッションに対する後続要求を検証できるように、SOAP ヘッダー内にセッション ID を設定する。
- 後続サービス要求の要求先としてサーバー URL を指定する。ログインサーバーでは、ログインコールしかサポートされません。
開発ツールごとに、セッションヘッダーとサーバー URL の指定方法は異なります。詳細は、使用している開発ツールのマニュアルを参照してください。
login() は、1 時間につき 1 ユーザーあたり最大 3,600 コールに制限されています。この制限を超えると、「Login Rate Exceeded」 (ログイン数の制限を超えました。) エラーが表示されます。1 時間の上限を超えると、Salesforce によりユーザーのログインがブロックされます。ユーザーはブロックされてから 1 時間後、もう一度ログインを試行できます。
Enterprise と Partner エンドポイント
バージョン 11.1 以前の API では、Partner WSDL で構築されたクライアントアプリケーションは Enterprise エンドポイントに要求を送信可能で、Enterprise WSDL で構築されたアプリケーションは Partner エンドポイントに要求を送信可能です。バージョン 12.0 以降では、この機能はサポートされていません。
エンドポイントのベース URL
- 推奨: [私のドメイン] のログイン URL: 本番組織の場合は https://MyDomainName.my.salesforce.com 形式、Sandbox の場合は https://MyDomainName--SandboxName.sandbox.my.salesforce.com 形式。
- デフォルトの Salesforce ログイン URL: 本番組織および Developer Edition 組織の場合は https://login.salesforce.com、Sandbox の場合は https://test.salesforce.com。
すべての例では、本番組織で推奨される [私のドメイン] のログイン URL 形式が使用されています。Sandbox のエンドポイントを指定したり、デフォルトの Salesforce ログイン URL を使用したりする場合は、必要に応じて例を変更してください。
[私のドメイン] のログイン URL を使用する利点とデフォルトの Salesforce ログイン URL を使用する利点を理解するには、Salesforce ヘルプの「コードを使用した Salesforce へのログイン」を参照してください。
プロキシを使用したログイン
プロキシ経由で Salesforce にログインする場合は、ログインに使用する ConnectorConfig クラスのインスタンスでプロキシホストおよびポート番号を設定します。プロキシを認証する必要がある場合は、ユーザー名およびパスワードを設定します。
ConnectorConfig config = new ConnectorConfig();
config.setUsername(userId);
config.setPassword(passwd);
config.setAuthEndpoint(authEndPoint);
config.setProxy(proxyHost, proxyPort);
// Set the username and password if your proxy must be authenticated
config.setProxyUsername(proxyUsername);
config.setProxyPassword(proxyPassword);
try {
EnterpriseConnection connection = new EnterpriseConnection(config);
// etc.
} catch (ConnectionException ce) {
ce.printStackTrace();
}セッション終了
クライアントアプリケーションは、セッションを終えるために明示的にログアウトする必要はありません。セッションは、前もって決定された非活動状態の期間の後、自動的に終了します。デフォルト値は 2 時間です。API コールを行うと、非活動状態タイマーがゼロにリセットされます。セッションの有効期限 (タイムアウト) の値を変更するには、[設定] から、[クイック検索] ボックスに「セッションの設定」と入力し、[セッションの設定] を選択します。
有効なセルフサービスユーザーの認証
アクティブセルフサービスユーザーを認証するには、セルフサービスがユーザーの認証に対して LoginScopeHeader を使用して、Organization ID を指定します。認証の前提として、セルフサービスユーザーが存在しており、かつ有効である必要があります (「SelfServiceUser」参照)。
顧客の Experience Cloud サイトのユーザー認証
[API の有効化] 権限を持つ有効な Experience Cloud サイトユーザーを認証するには、LoginScopeHeader を使用して、Experience Cloud サイトを含む組織の Organization ID を指定します。サイトユーザーは、存在する有効なユーザーであり、認証される前に Experience Cloud サイトに属している必要があります。
Experience Cloud サイトのユーザーを認証するエンドポイントを指定する場合、ベース URL の形式は、本番組織では https://MyDomainName.my.site.com、Sandbox 組織では https:/MyDomainName--SandboxName.sandbox.my.site.com となります。
Experience Cloud サイトのユーザー認証のすべての例では、拡張ドメインが有効な本番組織用のベース URL の形式が使用されています。Sandbox 組織のエンドポイントを指定する場合、または拡張ドメインをまだ有効にしていない場合は、ベース URL を更新してください。
エンドポイントの例
クライアントアプリケーションでは、ログイン要求を次のエンドポイントに送信できます (この際に、認証エンドポイントの有効な値を使用します)。
- String authEndPoint = "https://MyDomainName.my.salesforce.com/services/Soap/c/version/"
- String authEndPoint = "https://MyDomainName.my.site.com/path-prefix/services/Soap/c/version/"
- String authEndPoint = "https://MyDomainName.my.salesforce.com/services/Soap/u/version/"
- String authEndPoint = "https://MyDomainName.my.site.com/path-prefix/services/Soap/u/version/"
ログアウト
Salesforce では、不要になったセッションを終了するために、必ず logout() をコールすることをお勧めします。このコールは、子セッションも終了させます。ほとんどの保護が行われるようにするには、セッションが期限切れになるのを待つのではなく、ユーザーをログアウトします。
サンプルコード — Java
このサンプルでは、指定されたユーザー名、パスワード、および認証エンドポイント URL を使用してユーザーをログインします。このサンプルでは、ログインの成功後、ユーザー情報とセッション情報をコンソールに書き込みます。このサンプルを実行する前に、ユーザー名、パスワード、認証エンドポイントの値を有効な値に置き換えてください。
API コールを作成するために必要な Web サービス WSDL を生成してインポートする方法については、「クイックスタート」の「ステップ 2: Web サービス WSDL を生成または取得する」を参照してください。
public boolean loginSample() {
boolean success = false;
String username = "username";
String password = "password";
String authEndPoint = "https://MyDomainName.my.salesforce.com/services/Soap/c/24.0/";
try {
ConnectorConfig config = new ConnectorConfig();
config.setUsername(username);
config.setPassword(password);
System.out.println("AuthEndPoint: " + authEndPoint);
config.setAuthEndpoint(authEndPoint);
connection = new EnterpriseConnection(config);
// Print user and session info
GetUserInfoResult userInfo = connection.getUserInfo();
System.out.println("UserID: " + userInfo.getUserId());
System.out.println("User Full Name: " + userInfo.getUserFullName());
System.out.println("User Email: " + userInfo.getUserEmail());
System.out.println();
System.out.println("SessionID: " + config.getSessionId());
System.out.println("Auth End Point: " + config.getAuthEndpoint());
System.out
.println("Service End Point: " + config.getServiceEndpoint());
System.out.println();
success = true;
} catch (ConnectionException ce) {
ce.printStackTrace();
}
return success;
}サンプルコード — C#
このサンプルでは、指定されたユーザー名、パスワードを使用してユーザーをログインします。login コールの結果には、サービスエンドポイント URL が含まれます。この URL は、組織にサービスしている仮想サーバーインスタンスであり、一意のセッション ID です。このサンプルでは、バインドにこれらの返された値を設定します。バインド URL に返されたサービスエンドポイントを設定します。また、すべての API コールで使用されているセッションヘッダーのセッション ID を設定します。次に、ログインの成功後、ユーザー情報とセッション情報をコンソールに書き込みます。このサンプルを実行する前に、ユーザー名とパスワードの値を有効な値に置き換えてください。
API コールを作成するために必要な Web サービス WSDL を生成してインポートする方法については、「クイックスタート」の「ステップ 2: Web サービス WSDL を生成または取得する」を参照してください。
public bool loginSample()
{
Boolean success = false;
string username = "username";
string password = "password";
// Create a service object
binding = new SforceService();
LoginResult lr;
try
{
Console.WriteLine("\nLogging in...\n");
lr = binding.login(username, password);
/**
* The login results contain the endpoint of the virtual server instance
* that is servicing your org. Set the URL of the binding
* to this endpoint.
*/
// Save old authentication end point URL
String authEndPoint = binding.Url;
// Set returned service endpoint URL
binding.Url = lr.serverUrl;
/** Get the session ID from the login result and set it for the
* session header that will be used for all subsequent calls.
*/
binding.SessionHeaderValue = new SessionHeader();
binding.SessionHeaderValue.sessionId = lr.sessionId;
// Print user and session info
GetUserInfoResult userInfo = lr.userInfo;
Console.WriteLine("UserID: " + userInfo.userId);
Console.WriteLine("User Full Name: " +
userInfo.userFullName);
Console.WriteLine("User Email: " +
userInfo.userEmail);
Console.WriteLine();
Console.WriteLine("SessionID: " +
lr.sessionId);
Console.WriteLine("Auth End Point: " +
authEndPoint);
Console.WriteLine("Service End Point: " +
lr.serverUrl);
Console.WriteLine();
// Return true to indicate that we are logged in, pointed
// at the right URL and have our security token in place.
success = true;
}
catch (SoapException e)
{
Console.WriteLine("An unexpected error has occurred: " +
e.Message + "\n" + e.StackTrace);
}
return success;
}