Получить полный ответ SAML в расширении SAML Spring Security - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть приложение Spring Boot, которое настроено в качестве поставщика услуг.Моя конечная цель - иметь возможность вызвать AWS STS Assume Role со службой SAML для создания временных учетных данных AWS от имени пользователя с ответом SAML, используемым для первоначальной аутентификации пользователей моего приложения.

Я нашел этот другой вопрос .С этим ответом я могу получить только утверждение, а не весь ответ.В результате моего тестирования для вызова API AWS, указанного выше, требуется полный ответ, а не только утверждение.

Я использовал это Расширение Chrome для просмотра ответа SAML.Когда я включаю все (обрисуйте в общих чертах ниже)

<samlp:Response>
   ...
   <saml:Assertion>
       ...
   </saml:Assertion>
</samlp:Response>

Роль AWS STS Assume Role с SAML работает.Ответ на другой связанный вопрос дает мне только блок

<saml:Assertion>...</saml:Assertion>

, и роль AWS STS Assume Role с SAML не выполняется.

Поэтому мой вопрос заключается в том, как получитьвесь XML-объект SAML Response обратно в контроллер моего приложения Spring Boot?

1 Ответ

0 голосов
/ 12 марта 2019

Я не знаю прямого способа в spring-security-saml, но, возможно, вы могли бы попытаться реализовать свой собственный SAMLProcessingFilter, то есть просто расширить существующий и переопределить метод tryAuthentication ().

Принцип:

  • В этом методе у вас есть доступ к ответу, возвращенному из IdP, и отправке обратно в SP (по крайней мере, в профиле Redirect-POST)
  • Возможно, у вас есть способчтобы извлечь то, что вам нужно, из httpRequest
  • Затем вы можете сохранить (сессия, переменная ThreadLocal, ...)
  • И, наконец, вы делегируете процесс аутентификации родителю (вызывая super.attemptAuthentication())

`

@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
    if ("POST".equalsIgnoreCase(request.getMethod())) {
        String samlResponse = request.getParameter("SAMLResponse");
        System.out.println("Original SAML Response (base64 decoded) : " + new 
        String(Base64.getDecoder().decode(samlResponse), StandardCharsets.UTF_8));
    }
    return super.attemptAuthentication(request, response);
}

`

...