Как настроить 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)


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

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

person Gertjan Al    schedule 19.07.2017