Перенаправление после выхода в OpenID Connect
Когда я вхожу в свое приложение с помощью Salesforce в качестве поставщика OpenID Connect (OP), я могу это сделать. Но когда я пытаюсь выйти из своего приложения, я выхожу из Salesforce, а затем перенаправляюсь на свою страницу входа в Salesforce https://{MY_DOMAIN}.my.salesforce.com/
.
Ожидаемое поведение:
Когда запрос выхода с post_logout_redirect_uri
отправляется OP, OP должен перенаправить на этот URL-адрес после своей собственной последовательности выхода.
Фактическое поведение:
Когда я пытаюсь выйти из приложения, меня перенаправляют в мой домен Salesforce, и меня просят снова войти в Salesforce.
Что я пробовал:
Согласно документации , я включил единый выход из системы в подключенном приложении, попробовав оба параметра https://{MY_KEYCLOAK_DOMAIN}/auth/realms/{REALM}/broker/{IDP}/endpoint/logout_response
и https://{MY_KEYCLOAK_DOMAIN}/auth/realms/{REALM}/protocol/openid-connect/logout
в качестве Single Logout URL
значения в конфигурации подключенного приложения.
Я попытался использовать метод выхода из системы по обратному каналу, но, похоже, он не выходит из системы Salesforce с его помощью.
Ответы
Как вы обнаружили, SF, действующий как поставщик OpenID Connect (OP), поддерживает только однократный выход из системы (SLO) OIDC фронтального канала. Это можно подтвердить с помощью метаданных OIDC в разделе /.well-known/openid-configuration
.
Как работает SLO фронтального канала в OIDC? Из спецификации :
OP, поддерживающие выход из системы на основе HTTP, должны отслеживать набор вошедших в систему RP, чтобы они знали, с какими RP связаться по их URI выхода, чтобы заставить их выйти из системы. Некоторые OP отслеживают это состояние с помощью cookie «посещенных сайтов». OP связываются с ними параллельно, используя динамически создаваемую страницу с HTML-
<iframe src="frontchannel_logout_uri">
тегами, отображающими URI выхода каждого авторизованного RP.
Никакого упоминания о post_logout_redirect_uri
. (Раньше говорилось о спецификации управления сеансом OIDC, post_logout_redirect_uri
но она была удалена в последнем проекте).
Как указано в справочном документе, на который вы ссылаетесь, URI выхода из внешнего канала, о котором говорится в спецификации, извлекается Salesforce из поля Single Logout связанного приложения.
Для перенаправления после выхода из системы Salesforce вы можете настроить URL-адрес выхода на уровне организации через Setup => Session Settings => Logout Page Settings => Logout URL
. Это будет применяться ко всем подключенным приложениям. Значение этого параметра конфигурации может указывать на службу, основанную на вашем собственном пользовательском коде, работающем везде, где можно дополнительно изучить запрос и выполнить соответствующие шаги постобработки.
NB: спецификации OIDC session mgmt + SLO (как для переднего, так и для заднего канала) все еще являются черновыми и не окончательными.