我已根据此项目构建了一个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。
再次感谢。
答案 0 :(得分:1)
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); SAMLCredential credential = (SAMLCredential) authentication.getCredentials(); System.out.println("assertion is:" + XMLHelper.nodeToString(SAMLUtil.marshallMessage(credential.getAuthenticationAssertion())))
有没有办法使用Postman制作相同的SAML令牌
没有。要获得SAML断言,您必须遵循完整的流程。此外,您无法自行生成SAML响应,因为您无法使用与IDP相同的私钥对其进行签名。如果它支持此功能,它还取决于您的IDP。您可以做的是配置IDP以生成具有非常长的到期时间(例如24小时)的SAML令牌。然后,您可以使用相同的SAML令牌在本地应用程序中进行测试。