Перенаправление после выхода в OpenID Connect

Aug 20 2020

Когда я вхожу в свое приложение с помощью 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 с его помощью.

Ответы

identigral Aug 20 2020 at 01:22

Как вы обнаружили, 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 (как для переднего, так и для заднего канала) все еще являются черновыми и не окончательными.