Как сделать так, чтобы запросы на вход в приложение Android отображались как один IP - PullRequest
0 голосов
/ 07 мая 2019

Я разрабатываю нативное приложение для Android, которое должно взаимодействовать с организацией Salesforce через SOAP API. В настоящее время, чтобы пользователи приложения могли войти в систему, они должны предоставить токен безопасности вместе со своим именем пользователя и паролем. Это делает процесс входа в систему / регистрации неудобно долгим и сложным. Насколько я вижу, единственное решение - это внести в белый список каждый IP-адрес в моей организации Salesforce. Я бы подумал, что это проблема безопасности, поэтому мне было интересно, есть ли лучшее решение.

Насколько я могу судить, одним из решений может быть настройка моего приложения для входа в систему через прокси, а затем просто внесение в белый список адреса этого прокси. Именно во время исследования этого я обнаружил https://serverfault.com/questions/514716/whats-the-minimum-required-squid-config-to-make-a-public-proxy-server, что заставило меня подумать, что, возможно, есть какой-то другой более устоявшийся способ сделать это, о котором я не знаю.

По сути, мой вопрос: есть ли способ, чтобы приложение для Android, работающее на любом телефоне, могло отправлять запросы к внешнему API, которые, кажется, приходят с одного IP-адреса (возможно, через прокси-сервер) (без каких-либо действий)? «)

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Похоже, вы решаете не ту проблему. Почему вы так сильно хотите обойти функции безопасности 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
0 голосов
/ 07 мая 2019

Правильный способ сделать это - иметь собственный бэкэнд, через который вы проксируете свои запросы.

например:

Android app -> Your backend -> Salesforce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...