Мне нужно связать Salesforce со сторонней организацией, которая использует нестандартную реализацию потока OAuth2.

Это означает, что необходимо выполнить ряд первоначальных шагов с использованием специально созданных конечных точек для получения Authorisation Code, а затем запросить Access Token и Refresh Token.

Но как только я получу Access Token и Refresh Token, я хотел бы сохранить их в Salesforce более традиционным способом, чтобы платформа могла использовать их для взаимодействия со сторонним API, а также обрабатывать получение новых Access Tokens по истечении срока их действия.

Я нашел OAuthToken Object, но он поддерживает только вызовы:

  • описатьSObjects()
  • запроса ( )

Поэтому я не понимаю, как добавить токены пользователю.

Я думаю, что, возможно, зашел в тупик, и, возможно, невозможно создать OAuthToken с помощью Apex.

Вопрос

  1. Существуют ли другие способы программного добавления Access Token и Refresh Token к User, чтобы работали встроенные механизмы Salesforce OAuth2?
5
Robs 28 Авг 2020 в 17:11
2
Насколько я знаю, создать его вручную невозможно. он создается автоматически, когда пользователь авторизует какое-либо связанное приложение. Подождем ответа мастодонтов sf :)
 – 
Oleksandr Berehovskyi
28 Авг 2020 в 17:10
Если вы посмотрите на этот код в моем вопросе без ответа, вы можете найти то, что вам нужно: salesforce.stackexchange.com/questions/317130/ …
 – 
Brian Kessler
28 Авг 2020 в 17:17
Спасибо @BrianKessler, но это совсем не помогает...
 – 
Robs
28 Авг 2020 в 17:19
Что делает его нестандартным?
 – 
identigral
28 Авг 2020 в 18:32

1 ответ

Объект OAuthToken используется Connected Apps для входящей связи (когда сторонние приложения хотят использовать API-интерфейсы Salesforce)

Стандартный подход для стороннего API, использующего поток OAuth, заключается в использовании Named Учетные данные.

Однако, как вы упомянули, API имеет нестандартный поток OAuth, поэтому вам, возможно, придется написать свою собственную реализацию и хранить AccessToken, RefreshToken и Validity в protected custom setting или пользовательский объект с encrypted field.

Вот отличный пример из ffhttp-core-samples, который должен помочь.

4
Anmol Kumar 28 Авг 2020 в 18:01