2016-03-21 1 views
1

Je dois utiliser Apache WSS4J 1.5 pour une signature/vérification SOAP, mais j'ai du mal à sauter/désactiver la validation du mot de passe UsernameToken.WSS4j 1.5: Comment passer la validation par mot de passe?

Dans WSS4J 1.6+ Je suis en mesure de configurer le moteur de sécurité pour utiliser la classe NoOpValidator() pour ignorer l'authentification de jeton de nom d'utilisateur, mais 1.5 n'a pas ce support.

Existe-t-il un moyen de dire à WSS4J 1.5 d'ignorer le routage de validation Nom d'utilisateur/Mot de passe?

Répondre

0

Après avoir creusé autour de la classe WSSecEngine un peu plus en profondeur, je trouve que je n'avais pas besoin d'un CallBackHandler, mais un processeur personnalisé qui saute le traitement de l'objet UsernameToken:

 WSSecurityEngine secEngine = new WSSecurityEngine(); 
     WSSConfig wsConfig = WSSConfig.newInstance(); 
     wsConfig.setProcessor(UsernameToken.TOKEN, new Processor() { 

      @Override 
      public void handleToken(Element arg0, Crypto arg1, Crypto arg2, CallbackHandler arg3, WSDocInfo arg4, Vector arg5, WSSConfig arg6) 
        throws WSSecurityException { 
       // skip the token processing 
       logger.debug("Skipping processing of the username token"); 
      } 

      @Override 
      public String getId() { 
       return null; 
      } 
     }); 
     secEngine.setWssConfig(wsConfig); 

Bien que WSS4J 1.5 est incroyablement vieux, nous espérons que cela peut espérer que quelqu'un d'autre à l'avenir.

WSS4J 1.6+ a changé la façon dont ces processeurs fonctionnent avec Validators à la place.

1

vous devez écrire votre propre implémentation de gestionnaire de rappel pour ignorer le chargement LoginContext. Ensuite, cette classe de gestionnaire peut être chargée à partir de la propriété système.

référence à partir du code source de javax.security.auth.callback.CallbackHandler,

Une implémentation par défaut de classe CallbackHandler peut être spécifié dans le auth.login.defaultCallbackHandler propriété de sécurité.

La propriété de sécurité peut être définie dans le fichier de propriétés de sécurité Java situé dans le fichier /lib/security/java.security. fait référence à la valeur de la propriété système java.home et indique le répertoire dans lequel JRE est installé.

Si la propriété de sécurité est défini sur le nom complet d'une classe de mise en œuvre de CallbackHandler, puis un LoginContext chargera le CallbackHandler spécifié et le transmettre aux LoginModules sous-jacents. Le LoginContext ne charge le gestionnaire par défaut que s'il n'a pas été fourni un. Toutes les implémentations de gestionnaire par défaut doivent fournir un constructeur à zéro argument.

être également au courant de certains risques est livré avec WSS4J 1.5.XX

+0

Je suis encore un peu confus comment enregistrer le gestionnaire de rappel. J'ai regardé le code source de 'UsernameTokenProcessor', mais au moment où il regarde le gestionnaire de callback ici, il compare déjà un mot de passe retourné. Je dois empêcher WSS4J d'essayer même de traiter le nom d'utilisateur, mais je ne suis pas entièrement sûr de ce que le gestionnaire de rappel devrait être ou comment il devrait être enregistré. Savez-vous s'il existe des documents/exemples pour cela? Je me rends compte que WSS4J 1.5 est assez vieux, et tous les docs que j'ai pu trouver sont pour WSS4J 2+. –

+0

Ok - donc j'ai creusé un peu plus dans le code et j'ai vu que ce n'était pas un CallbackHandler dont j'avais besoin mais un processeur personnalisé. –