You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用spring-security-saml2-service-provider序列化SAML断言?

spring-security-saml2-service-provider序列化SAML断言响应的实现

是的,spring-security-saml2-service-provider中存在类似原spring-security-saml2-core里序列化SAML断言响应的能力,只是实现逻辑和方式有所调整:

  • 获取断言对象:认证成功后,Spring Security会生成Saml2AuthenticationToken并放入安全上下文,你可以在自定义认证成功处理器、过滤器或控制器中提取该对象,从中获取SAML断言实例。
  • 序列化断言为字符串:由于spring-security-saml2-service-provider底层依赖OpenSAML库,你可以直接使用OpenSAML的XML序列化工具将断言对象转换为XML格式的字符串。
  • 代码示例:
@Component
public class CustomSamlSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth) throws IOException, ServletException {
        if (auth instanceof Saml2AuthenticationToken samlToken) {
            Assertion assertion = samlToken.getAssertion();
            // 利用OpenSAML的Marshaller完成序列化
            XMLObjectMarshaller marshaller = Configuration.getMarshallerFactory().getMarshaller(assertion);
            StringWriter writer = new StringWriter();
            marshaller.marshall(assertion, new StreamResult(writer));
            String serializedAssertion = writer.toString();
            
            // 将序列化后的断言返回给Angular SPA(注意转义XML中的引号)
            response.setContentType("application/json");
            response.getWriter().write("{\"samlAssertion\": \"" + serializedAssertion.replace("\"", "\\\"") + "\"}");
            return;
        }
        super.onAuthenticationSuccess(request, response, auth);
    }
}
  • 配置要点:需要将自定义的成功处理器配置到SAML2认证流程中,比如通过Saml2LoginConfigurer的successHandler方法指定。

内容的提问来源于stack exchange,提问作者george

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:30:57