2016-08-25 24 views
0

Je sécurise mes services Web SOAP en utilisant STS. Les jetons sont des jetons SAML 1.0. Les jetons SAML sont ajoutés dans l'en-tête SOAP en tant qu'en-tête de sécurité. J'ai besoin des SAMLAssertions comme j'ai besoin pour obtenir le nomIdentifier de SAMLAssertion. Puis-je obtenir la classe SAMLAssertion dans la classe PasswordCallBackHandler? Y a-t-il un autre moyen de le faire?Dans Axis2/Rampart, comment puis-je obtenir une assertion SAML dans PasswordCallBackHandler

+0

Puisqu'aucune réponse n'a été affichée, j'ajoute mon résultat d'enquête jusqu'à maintenant. Il semble que ce que je veux faire n'est pas possible dans un PasswordCallBack. Était en cours de la classe RampartConfig.java. Ce n'est pas fourni. Publiera ma stratégie, au cas où quelqu'un en aurait besoin. – Vish

Répondre

0

Enfin, j'ai été en mesure d'identifier une façon de faire ce que je voulais. Je vais énumérer sur le point de solution sage:

  • Ce ne est pas possible par mot de passe CallBackHandler comme axe ne donne pas accès au MessageContext.

  • La solution consiste à créer une classe de gestionnaire personnalisé qui étend org.apache.axis2.handlers.AbstractHandler. Puisque dans mon cas, c'est un jeton de sécurité SAML2, je voulais que mon gestionnaire soit appelé phase «post-sécurité» dans l'ordre de phase «InFlow». Cela garantit que l'en-tête de sécurité a passé la phase de sécurité. La classe handler possède une méthode invoke dont le paramètre MessageContext est le paramètre. MessageContext vous donne accès à l'intégralité de SOAPEnvelope et à son contenu. Voici le code squelette que vous pouvez construire sur:

    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; 
    } 
    

Bind ce gestionnaire à la phase personnalisée 'Post-sécurité' dans axis2.xml

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

I entrée bienvenue sur ce.