Вы находитесь здесь:
OAuth 2.0 для сторонних приложений: Создание сертификата клиента JWT
При использовании потоков удостоверений без заголовка, внедряющих черновик стандарта OAuth 2.0 для приложений First-Party, используйте JWT сертификации клиента, чтобы доказать, что приложения, отправляющие запросы в Salesforce, являются сторонними приложениями, созданными вашей компанией.
Требуемые версии
| Доступно в версиях: Salesforce Classic и Lightning Experience |
| Доступно в версиях: Enterprise Edition, Unlimited Edition и Developer Edition |
Salesforce требует, чтобы JWT подписывался посредством RSA SHA256, использующего переданный сертификат в качестве секрета подписи. Прежде чем начать работу, выполните следующие предварительные требования.
- Загрузите сертификат X509 в Java-магазин ключей (JKS). Размер сертификата не может превышать 4 КБ. В таком случае попробуйте использовать файл в кодировке DER для уменьшения размера.
- Зарегистрируйте сертификат в приложении внешнего клиента посредством поля
clientAssertionCertificateв типе ExtlClntAppOauthSettings. - Создайте приложение, генерирующее JWT, подписанное личным ключом сертификата X509. Связанное приложение внешнего клиента использует сертификат для проверки подписи. JWT должна соответствовать общим правилам формата, указанным в https://tools.ietf.org/html/rfc7519.
Примечание Salesforce не требует утверждения кода JWT (JTI) в маркерах носителя JWT. Однако, если вы передаете требование JTI в маркер носителя JWT, Salesforce проверяет, что требование JTI не было отправлено ранее. Эта проверка предотвращает атаки повтора JWT.
Чтобы создать допустимый JWT, выполните данные действия.
-
Сформируйте заголовок JWT со следующим форматом:
{"alg":"RS256"}. -
Base64- URL кодирует заголовок JWT, как определено в http://tools.ietf.org/html/rfc4648#page-7. Результат аналогичен
eyJhbGciOiJSUzI1NiJ9. -
Создайте набор утверждений JSON для JWT со следующими параметрами.
Параметр Описание issОтправитель должен содержать client_idOAuth для внешнего клиентского приложения, для которого вы зарегистрировали сертификат.audАудитория определяет сервер авторизации в качестве целевой аудитории. Сервер авторизации должен проверить, является ли он целевой аудиторией маркера.
Используйте URL-адрес сайта Experience Cloud, например, https:// MyExperienceCloudSite.my.site.com.
expДата и время истечения срока действия маркера, выраженное как количество секунд с 1970-01-01T0:0:0Z, измеренное в UTC. Salesforce разрешает 3-минутный буфер для искажения часов. Например, если время истечения срока действия установлено на 1735743600 секунд или 1 января 2025 года в 15:00:00 UTC, маркер продолжает действовать до 15:03:00 UTC в эту дату. Ниже указан пример набора утверждений JWT.{"iss": "3MVG99OxTyEMCQ3gNp2PjkqeZKxnmAiG1xV4oHh9AKL_rSK.BoSVPGZHQ ukXnVjzRgSuQqGn75NL7yfkQcyy7", "aud": "https://MyExperienceCloudSite.my.site.com", "exp": "1333685628"} -
Base64url кодирует набор утверждений JWT без разрывов строк. Вот пример.
eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0= -
Создайте строку для зашифрованного заголовка JWT и зашифрованного набора утверждений JWT в этом формате.
encoded_JWT_Header + "." + encoded_JWT_Claims_SetВ данном примере выделен зашифрованный заголовок JWT.eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0= - Загрузите сертификат X509 из JKS.
- Подпишите итоговую строку посредством RSA SHA256.
-
Создайте строку из шага 5. Создайте строку в таком формате.
existing_string + "." + base64_encoded_signatureВ данном примере выделена подпись в кодировке base64.eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiAiM01WRzk5T3hUeUVNQ1EzZ05wMlBqa3FlWkt4bm1BaUcxeFY0b0hoOUFLTF9yU0su Qm9TVlBHWkhRdWtYblZqelJnU3VRcUduNzVOTDd5ZmtRY3l5NyIsICJwcm4iOiAibXlAZW1haWwu Y29tIiwgImF1ZCI6ICJodHRwczovL2xvZ2luLnNhbGVzZm9yY2UuY29tIiwgImV4cCI6ICIxMzMz Njg1NjI4In0=.iYCthqWCQucwi35yFs-nWNgpF5NA_a46fXDTNIY8ACko6BaEtQ9E6h4Hn1l_pcwcK I_GlmfUO2dJDg1A610t09TeoPagJsZDm_H83bsoZUoI8LpAA1s-2aj_Wbysqb1j4uDToz 480WtEbkwIv09sIeS_-QuWak2RXOl1Krnf72mpVGS4WWSULodgNzlKHHyjAMAHiBHIDNt 36y2L2Bh7M8TNWiKa_BNM6s1FNKDAwHEWQrNtAeReXgRy0MZgQY2rZtqT2FcDyjY3JVQb En_CSjH2WV7ZlUwsKHqGfI7hzeEvVdfOjH9NuaJozxvhPF489IgW6cntPuT2V647JWi7ngИспользуйте подписанный JWT в параметреclient_assertionпри настройке потоков без заголовка посредством стандарта OAuth 2.0 для приложений First- Party.

