【问题标题】:In Axis2/Rampart, how can I get SAML Assertion in PasswordCallBackHandler在 Axis2/Rampart 中,如何在 PasswordCallBackHandler 中获取 SAML 断言
【发布时间】:2016-08-25 08:45:59
【问题描述】:

我正在使用 STS 保护我的基于 SOAP 的 Web 服务。令牌是 SAML 1.0 令牌。 SAML 令牌作为安全标头添加到 SOAP 标头中。我需要 SAMLAssertion,因为我需要从 SAMLAssertion 中获取 nameIdentifier。

我可以在 PasswordCallBackHandler 类中获取 SAMLAssertion 吗?有没有其他方法呢。

【问题讨论】:

  • 由于没有发布任何答案,我正在添加我的调查结果。看来我想做的事情在 PasswordCallBack 中是不可能的。正在通过 RampartConfig.java 类。这没有提供。将发布我的策略,以防有人需要。

标签: axis2 rampart


【解决方案1】:

我终于能够找到一种方法来做我想做的事。我将明智地列出解决方案:

  • 这不可能通过 Password CallBackHandler 因为轴不提供对 MessageContext 的访问权限。

  • 解决方案是创建一个扩展 org.apache.axis2.handlers.AbstractHandler 的自定义处理程序类。因为在我的情况下它是一个 SAML2 安全令牌,我希望我的处理程序在“流入”阶段顺序中被称为“后安全”​​阶段。这确保了安全标头已通过安全阶段。处理程序类有一个调用方法,该方法以 MessageContext 作为其参数。 MessageContext 使您可以访问整个 SOAPEnvelope 及其内容。以下是您可以构建的框架代码:

      public class LIMSConHandler extends AbstractHandler  {
          private Log LOG = LogFactory.getLog(LIMSConHandler.class);
    
          public InvocationResponse invoke(MessageContext ctx) throws  AxisFault {
    
          //following code gives you access to the soapEnvelope
          SOAPEnvelope msgEnvelope = ctx.getEnvelope();
          SOAPHeader msgHeader = msgEnvelope.getHeader();
          //add your logic to extract the security header and SAML assertion
    
          return InvocationResponse.CONTINUE;
     }
    

将此处理程序绑定到axis2.xml中的“安全后”自定义阶段

    <phaseOrder type="InFlow">
     .........
    <phase name="Security"/>
    <phase name="PostSecurity">
    <handler name="LIMSConHandler"    class="labware.web.ws.control.LIMSConHandler"/>

我欢迎对此提出意见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 2011-07-02
    • 2012-10-14
    • 2015-09-02
    • 2015-08-04
    相关资源
    最近更新 更多