Похоже, вы решаете не ту проблему. Почему вы так сильно хотите обойти функции безопасности SF.
Попробуйте войти в SF, используя REST, а не SOAP. Полученный вами идентификатор сеанса можно использовать в любом API. Поэтому, если вы входите в систему с помощью OAuth2, вам может не потребоваться токен безопасности. Вам потребуются идентификатор и секретный ключ потребителя (но это всего лишь пара значений, которые вы безопасно генерируете в SF, не привязанные к какому-либо конкретному пользователю. Вы даже можете использовать производственные значения для входа в песочницы).
Есть МНОГО чтения , если вы хотите сделать это правильно. И какой-то обязательный шаг создания «Подключенного приложения». Если возможно, проверьте, нет ли в вашей библиотеке Android чего-то встроенного для входа в OAuth (в SF, Gmail, Facebook, LinkedIn, Twitter ... вы можете найти OAuth / OpenId в нескольких местах)
Если вы хотите установить чистое фоновое соединение, когда пользователь не понимает, что он общается с Salesforce, вероятно, вам лучше подойдет поток OAuth " Имя пользователя и пароль ". Это должно быть минимальные изменения в вашем коде по сравнению с вызовом входа SOAP. Он слабый в том смысле, что вам все еще нужно иметь пароль (либо пароль пользователя, либо некоторую выделенную учетную запись интеграции), но есть вероятность, что токен безопасности не понадобится. Попробуйте (примеры ниже) и проверьте историю входа пользователя на наличие ошибок.
Если у ваших пользователей правильные учетные записи SF, возможно, другой поток OAuth лучше. Тот, который в идеале отображает их со страницей входа SF, которой они доверяют, и просто перенаправляет обратно в ваше приложение, когда вход выполнен успешно. (Возможно, вы видели что-то подобное, если недавно использовали SF Data Loader?). Таким образом, ваше приложение не видит пароль, а только результат. И это будет работать, даже если ваш клиент захочет использовать собственный домен, решит включить единый вход ...
Извините, аутентификация, авторизация - это огромные темы. Но есть лучший способ, поэтому я бы хотел, чтобы вы приняли осознанное решение, прежде чем закодировать себя в угол ... Если справочные материалы слишком сухие / слишком новые и полны ключевых слов, то, возможно, попробуйте пропустить некоторые следы:
Ваш логин SOAP выглядит примерно так:
POST
https://test.salesforce.com/services/Soap/c/45.0/
HEADERS
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
PAYLOAD
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:enterprise.soap.sforce.com">
<soapenv:Body>
<urn:login>
<urn:username>uptonogood@example.com</urn:username>
<urn:password>Nice_Try!111 + security token</urn:password>
</urn:login>
</soapenv:Body>
</soapenv:Envelope>
Соответствующий логин OAuth (вынужден возвращать XML, хотя мобильное приложение должно «нравиться» JSON лучше, так что если хотите - отбросьте добавленный мной заголовок Accept
)
POST
https://test.salesforce.com/services/oauth2/token
HEADERS
Content-Type:application/x-www-form-urlencoded
Accept:application/xml
PAYLOAD
grant_type=password&
client_id=3MVG9fTLmJ60pJ5JaGv0NNHD5nh6P...&
client_secret=3437814...&
username=uptonogood@example.com&
password=Nice_Try!111