Получить полный ответ SAML в расширении SAML Spring Security

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

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

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

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

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

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

блок и AWS STS предположить, что роль с SAML не выполняется.

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

0 ответов

Я не знаю прямого способа в 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);
}

`

Другие вопросы по тегам