我使用STS保护基于SOAP的Web服务。令牌是SAML 1.0令牌。 SAML令牌作为安全头添加在SOAP Header中。我需要SAMLAssertions,因为我需要从SAMLAssertion获取nameIdentifier。
我可以在PasswordCallBackHandler类中掌握SAMLAssertion吗?有没有其他方法可以做到。
答案 0 :(得分:0)
最后,我能够找到一种方法来做我想做的事。我将逐点列出解决方案:
通过密码CallBackHandler无法实现,因为轴不允许访问MessageContext。
解决方案是创建一个自定义处理程序类,它扩展了org.apache.axis2.handlers.AbstractHandler。因为在我的情况下它是一个SAML2安全令牌,我希望我的处理程序在'InFlow'阶段顺序中被称为'后安全'阶段。这可确保安全标头已通过安全阶段。处理程序类有一个invoke方法,它有一个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中的“Post-Security”自定义阶段
<phaseOrder type="InFlow">
.........
<phase name="Security"/>
<phase name="PostSecurity">
<handler name="LIMSConHandler" class="labware.web.ws.control.LIMSConHandler"/>
我欢迎对此提出意见。