Лучшая практика для проверки подлинности API Salesforce.com для фоновых приложений
API Salesforce.com, похоже, предполагает, что вы всегда будете использовать приложение в качестве активного пользователя. Их методы аутентификации (Session ID и OAuth) поддерживают это, поскольку они оба требуют, чтобы аутентифицированный пользователь "делал что-то".
Какова стратегия, когда у вас есть фоновое приложение, которое нуждается в доступе к API? Примеры, которые я видел, запрашивают ваши полные учетные данные - имя пользователя, пароль и токен безопасности. Я не только не хочу знать или хранить эту информацию, но она может меняться (из политики паролей и т.д.), И я предпочел бы не отключать приложение из-за этого.
Какова "наилучшая практика" для долговечной аутентификации API SFDC, которая не требует взаимодействия с пользователем?
Ответы
Ответ 1
Запросы API Salesforce.com работают в контексте пользователя, идентифицированного sessionId (aka access_token) (единственное исключение - неавторизованные пользовательские API-интерфейсы).
Итак, чтобы совершать вызовы API, вам понадобится sessionId, вы можете получить его, как вы говорите, сохраняя токен имени пользователя/пароля/безопасности и вызывая логин (или поток username/password oauth2), когда вам нужно.
В качестве альтернативы вы можете использовать интерактивный поток OAuth, который требует от пользователя только один раз авторизации вашего приложения, после чего вам будет предоставлен долгоживущий токен, называемый токеном обновления. В любой момент после этого вы можете использовать службу токенов oauth2, чтобы получить новый access_token (который затем может выполнять вызовы API), используя только токен обновления.
Похоже, что этот последний подход наилучшим образом отвечает вашим потребностям, для этого требуется только однократное взаимодействие с пользователем для авторизации вашего приложения.
Ответ 2
К сожалению, вам нужно использовать учетную запись для доступа к SF API. Вначале я думал, что целью создания удаленного доступа было избежать этого, но, увы, это не так.
Не уверен, что то, что я делаю, - это лучший способ сделать что-то, но я использую конкретный пользователь API, который мы создали для этой цели, и сохраняем учетные данные в файле конфигурации и шифруем пароль с помощью DPAPI. Я использую SOAP WS, поэтому я вызываю login (имя пользователя, psswd), и я использую этот идентификатор сеанса в последующих вызовах. Вы также можете получить свой идентификатор сеанса с помощью OAuth 2.0, но для этого вам необходимо создать приложение удаленного доступа, и вам потребуется еще имя пользователя/пароль.
Ответ 3
Аутентификация веб-сервера OAuth 2.0 лучше всего подходит для текущего варианта использования.
https://help.salesforce.com/HTViewHelpDoc?id=remoteaccess_oauth_web_server_flow.htm&language=en_US