Spring Security SAML:在错误页面上显示SAML令牌

时间:2018-04-23 01:11:50

标签: spring-security saml spring-saml

我已根据此项目构建了一个SAML SP:https://github.com/vdenotaris/spring-boot-security-saml-sample,并希望在错误页面上显示SAML令牌以进行调试。

我添加了错误控制器

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class ErrorController implements org.springframework.boot.autoconfigure.web.ErrorController {

    private static final Logger log = LoggerFactory.getLogger(SSOController.class);
    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error(HttpServletRequest request, Model model, Exception exception) {

        model.addAttribute(exception);
        return "error";
    }

    @Override
    public String getErrorPath() {

        return PATH;
    }

}

我正在使用错误的请求对其进行测试,但是Exception不包含太多有用的信息。我想在错误页面上或至少在日志中显示SAML令牌以进行故障排除。

如何访问SAML令牌或至少访问SAML令牌的属性。

提前致谢。

此外,有没有办法使用Postman(或类似工具)制作相同的SAML令牌,以使测试更容易。现在,我每次都要部署到AWS,因为第三部分IdP未配置为处理localhost。

再次感谢。

1 个答案:

答案 0 :(得分:1)

  1. 在您的应用程序的任何位置显示/访问SAML断言(SAML断言是SAML响应的一部分)(当然在成功之后) 身份验证),您可以使用以下代码。
  2. Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    SAMLCredential credential = (SAMLCredential) authentication.getCredentials();
    System.out.println("assertion is:" + XMLHelper.nodeToString(SAMLUtil.marshallMessage(credential.getAuthenticationAssertion())))
    
    1. 如果要在日志中打印SAMM响应,可以将spring-security的日志记录级别设置为debug,spring将在日志中打印SAML响应。
    2.   

      有没有办法使用Postman制作相同的SAML令牌

      没有。要获得SAML断言,您必须遵循完整的流程。此外,您无法自行生成SAML响应,因为您无法使用与IDP相同的私钥对其进行签名。如果它支持此功能,它还取决于您的IDP。您可以做的是配置IDP以生成具有非常长的到期时间(例如24小时)的SAML令牌。然后,您可以使用相同的SAML令牌在本地应用程序中进行测试。