2016-08-25 5 views
0

STS를 사용하여 SOAP 기반 웹 서비스를 보안하고 있습니다. 토큰은 SAML 1.0 토큰입니다. SAML 토큰은 보안 헤더로 SOAP 헤더에 추가됩니다. SAMLAssertion에서 nameIdentifier를 가져와야 할 때 SAMLAssertions가 필요합니다.Axis2/Rampart에서 PasswordCallBackHandler에서 SAML 어설 션을 얻는 방법

PasswordCallBackHandler 클래스에서 SAMLAssertion을 유지할 수 있습니까? 그것을하는 다른 방법이 있습니까?

+0

답변이 게시되지 않았으므로 지금까지 조사 결과를 추가하고 있습니다. PasswordCallBack에서 내가하고 싶은 일은 불가능한 것 같습니다. RampartConfig.java 클래스를 살펴 보았습니다. 이것은 제공되지 않습니다. 누군가가 필요로 할 경우에 대비하여 내 전략을 올릴 것입니다. – Vish

답변

0

마지막으로 나는 내가 원하는 것을 할 수있는 방법을 정립 할 수있었습니다. 솔루션 포인트를 현명하게 나열하겠습니다 :

  • 암호로는 불가능합니다. CallBackHandler는 축으로 MessageContext에 대한 액세스 권한을 부여하지 않습니다.

  • 해결 방법은 org.apache.axis2.handlers.AbstractHandler를 확장하는 사용자 정의 처리기 클래스를 만드는 것입니다. 필자의 경우 SAML2 보안 토큰이 있었기 때문에, 처리기를 'InFlow'단계에서 '보안 후 단계'라고 부르기를 원했습니다. 이렇게하면 보안 헤더가 보안 단계를 통과했는지 확인할 수 있습니다. 핸들러 클래스는 매개 변수로 MessageContext를 갖는 invoke 메소드를 가진다. 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; 
    } 
    

바인딩

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

내가 입력을 환영 axis2.xml의 '후 보안'사용자 정의 단계로이 핸들러 : 다음은 당신이 만들 수 골격 코드 이에.