Вы находитесь здесь:
Ключ подтверждения для расширения обмена кодами (PKCE)
Чтобы повысить безопасность внедрений OAuth и поставщика проверки подлинности, используйте расширение ключа подтверждения OAuth 2.0 для обмена кодами (PKCE). PKCE можно требовать на уровне всей организации, требовать его для определенного связанного приложения и автоматически включать его для поддерживаемых поставщиков проверки подлинности.
Требуемые версии
| Доступно в версиях: все версии |
Во время потока кода авторизации OAuth и его производных расширение PKCE помогает обеспечить, что клиент, инициирующий поток, является тем же клиентом, который завершает поток. Во время этих потоков приложение запрашивает код авторизации в Salesforce, который потом обменивается на маркер доступа. Традиционно приложение может защитить запрос маркера, добавив свой секрет пользователя связанного приложения. Поскольку секрет пользователя — это информация, известная только приложению и Salesforce, она функционирует как пароль для доступа к конечной точке маркера Salesforce. Даже если взломщик каким-то образом получает доступ к коду авторизации, он не может использовать его для получения маркера доступа, если у него нет секрета пользователя.
Но общедоступные клиенты, например, мобильные приложения и приложения на одной странице, не могут хранить секрет пользователя в тайне. В отличие от личных клиентских приложений с традиционной архитектурой клиентского сервера, общедоступные клиенты не имеют личного интерфейса, где они могут хранить секрет пользователя. Если общедоступный клиент отправляет секрет пользователя в запросе маркера, он рискует его слить. Поэтому мы не рекомендуем добавлять секрет пользователя в запросы маркеров для общедоступного клиента.
Не имея секрета пользователя, приложение уязвимо для злоумышленников, перехвативших код авторизации и пытающихся обменять его на маркер доступа. PKCE помогает заполнить пробел в секрете пользователя посредством набора хэшированных параметров, понятных только вашему приложению и Salesforce. Во время потока, внедряющего PKCE, приложение создает случайную строку, известную как параметр code_verifier. Потом хэшируется это значение посредством алгоритма SHA-256. Это хэшированное значение является параметром code_challenge. Ключевым понятием хэширования SHA-256 является то, что оно работает только в одном направлении. code_challenge можно получить из code_verifier, выполнив алгоритм SHA-256. Но вы не можете запустить его в обратном порядке, чтобы получить code_verifier от code_challenge.
Понятие односторонней функции играет важную роль в том, почему PKCE работает. Когда приложение отправляет первичный запрос кода авторизации, оно содержит параметр хэшированного code_challenge. Потом, при запросе маркера доступа, он содержит параметр code_verifier. Salesforce использует оба параметра и может выполнить алгоритм SHA-256 на значении code_verifier для сравнения с code_challenge. Если значения совпадают, Salesforce может проверить отправку запроса на авторизацию и запроса на маркер одним приложением. Даже если у злоумышленника есть код авторизации, он не может обменять его на маркер доступа, поскольку у него нет параметров PKCE, известных только вашему приложению и Salesforce.
Рекомендуем всегда внедрять PKCE для общедоступных клиентов. Для личных клиентов рекомендуем внедрить PKCE и добавить секрет пользователя в запросы маркеров.
При необходимости внедрите PKCE, добавив параметры code_challenge и code_verifier при создании вариантов потока кодов авторизации в Salesforce. Эти потоки поддерживают PKCE.
- Поток веб-сервера
- Поток гибридного веб-сервера
- Все варианты кода авторизации и потока регистрационных данных, включая регистрацию без заголовка, вход без пароля и гостевые потоки без заголовка. См. Потоки удостоверения без заголовка.
Чтобы обеспечить применение PKCE, рекомендуем принять следующие меры безопасности.
- Требуйте PKCE на едином уровне на странице параметров OAuth и OpenID Connect. Если этот параметр включен, все варианты потока кода авторизации, не использующие PKCE, блокируются автоматически.
- Требовать PKCE для определенных связанных приложений. Разработчик связанного приложения должен внедрить PKCE при создании потоков авторизации посредством этого приложения.
- Используйте PKCE для поставщика проверки подлинности. Для поддерживаемых поставщиков проверки подлинности можно автоматически использовать PKCE, выбрав один параметр. Данные поставщики проверки подлинности поддерживают PKCE.
- Создание параметров PKCE
Используйте конечную точку генератора PKCE для быстрого создания параметровcode_challengeиcode_verifier, которые можно внедрить в вариантах потока кода авторизации.
Создание параметров PKCE
Используйте конечную точку генератора PKCE для быстрого создания параметров code_challenge и code_verifier, которые можно внедрить в вариантах потока кода авторизации.
- Включите общий доступ к ресурсам с запросом происхождения (CORS) для конечных точек OAuth, что автоматически включает CORS для конечной точки
/services/oauth2/pkce/generator. - Чтобы создать параметры
code_challengeиcode_verifier, отправьте запрос HTTP GET в конечную точку/services/oauth2/pkce/generatorв URL-адресе входа «Моего домена» или URL-адресе сайта Experience Cloud. Не добавляйте заголовки или параметры текста в этот запрос.Ниже указан пример запроса, использующего URL-адрес входа «Моего домена».GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.salesforce.comНиже указан пример запроса, использующего URL-адрес сайта Experience Cloud.GET /services/oauth2/pkce/generator? HTTP 1.1 Host: MyDomainName.my.site.comSalesforce отвечает следующими параметрами PKCE.
Ниже приведен пример ответа.Параметр Описание code_challenge_methodМетод, используемый для вычисления code_challengeизcode_verifier. Salesforce использует методS256, который вычисляетcode_challengeизcode_verifierпосредством алгоритма SHA256. Дополнительную информацию см. в разделе 4.2 в RFC 7636: Ключ подтверждения для обмена кодами общедоступными клиентами OAuth.code_challengeУказывает хэш-значение SHA256 значения
code_verifierв запросе маркера. Значением является URL-адрес Base-64, зашифрованный в соответствии с разделом 5 RFC 4648: Кодировки данных Base16, Base32 и Base64.При настройке потока авторизации добавьте это значение в запрос авторизации.
code_verifierУказывает 128 байтов случайных данных с высокой энтропией, чтобы затруднить угадывание значения кода. Установите этот параметр, чтобы предотвратить атаки перехвата кода авторизации. Значением является URL-адрес Base-64, зашифрованный в соответствии с разделом 5 RFC 4648: Кодировки данных Base16, Base32 и Base64.
При настройке потока авторизации добавьте это значение в запрос маркера.
{ “code_challenge_method”:“S256” “code_challenge”:“JB7nT*************” “code_verifier”:“GkLvw**************” }
При настройке потока веб-сервера, потока гибридного веб-сервера и вариантов кода авторизации и потока регистрационных данных добавьте параметры code_challenge и code_verifier в запросы по назначению.

