Как настроить Keycloak с профилем SAML ECP

Я реализую поток аутентификации SSO с использованием SAML для веб-сервера, на котором запущен tomcat. При использовании привязок POST или Redirect все работает нормально, но из того, что я прочитал для поддержки аутентификации SAML перед REST API, мне также нужно настроить и использовать профиль ECP.

Сначала поправьте меня, если я ошибаюсь, но поток ECP должен быть таким:

  1. Client accesses the SP REST API
    • Client knows he needs to authenticate so he sets up the required ECP headers (Accept: application/vnd.paos+xml and PAOS: urn:liberty:paos:2003-08;urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp)
  2. SP видит, что клиент не аутентифицирован, и возвращает SOAP Envelop, содержащий запрос PAOS.
  3. Клиент обязан отправить это соответствующему IdP в своей потребительской службе ECP.
  4. IdP запрашивает у клиента аутентификацию
  5. IdP возвращает ответ в форме другого конверта SOAP, содержащего в своем теле ответ saml.
  6. Клиент должен отправить этот ответ в службу получателя утверждений ECP / SOAP SP.

Проблема в том, что все это работает до шага 6. На этом шаге у меня проблема в том, что тело конверта ответа содержит атрибут «Назначение», который указывает на службу потребителей утверждений POST SP. Этот атрибут назначения устанавливается keycloak и не соответствует фактической службе ECP, на которую я хочу отправить ответ. Используемая нами библиотека SAML - opensaml, она проверяет URI запроса на соответствие этому атрибуту Destination и, если они не совпадают, выдает исключение org.opensaml.xml.security.SecurityException: SAML message intended destination endpoint did not match recipient endpoint.

Я понимаю, почему возникает это исключение, но не могу понять, как настроить Keycloak с помощью службы ECP / SOAP SP. В консоли администратора Keycloak я могу настроить только URL-адреса для SSO POST / Redirect и SLO POST / Redirect, но ничего о ECP.

В настоящее время я настраиваю другого IdP, но мне бы очень хотелось убедиться, что Keycloak также может быть поддерживаемым сервером для нашего решения.


person Makpoc    schedule 24.11.2016    source источник


Ответы (1)


arrow_upward
-1
arrow_downward

Разве вы не можете просто прочитать paos: Request responseConsumerURL и опубликовать ответ idp по этому URL-адресу?

По крайней мере, так мне удалось это сделать.

person Gertjan Al    schedule 19.07.2017