WSS4J

Apache WSS4J est une implémenation de OASIS Web Services Security (WS-Security). C'est une librairie qui peut être utilisée pour signer et vérifier des messages SOAP contenant des informations WS-Security information. WSS4J utilise les projets Apache Axis and Apache XML-Security.

WSS4J implémente

  • * OASIS Web Serives Security: SOAP Message Security 1.0 Standard 200401, March 2004
  • * Username Token profile V1.0
  • * X.509 Token Profile V1.0

Sécurité Username Token avec un CallbackHandler

Les étapes suivantes expliquent comment, une fois le client créé via axis (WSDL2Java), sécuriser une service web en utilisant un Username Token et un callback handler

Etape 1: Création d'un descripteur de déployement

Une référence à la classe callback est insérée. Elle permet d'indiquer quelle classe se charge de la récupération du mot de passe.

<deployment xmlns="http://xml.apache.org/axis/wsdd/" 
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
  <globalConfiguration >
   <requestFlow >
    <handler type="java:org.apache.ws.axis.security.WSDoAllSender" >
     <parameter name="action" value="UsernameToken Timestamp"/>
     <parameter name="timeToLive" value="3000" />
     <parameter name="user" value="wss4j"/>
     <parameter name="passwordCallbackClass" value="mon.package.MonPWCallback"/>
     <parameter name="passwordType" value="PasswordText"/>
     <parameter name="addUTElements" value="Nonce Created" />
    </handler>
   </requestFlow >
  </globalConfiguration >
</deployment>

Le paramètre action spécifie les différents éléments à ajouter dans le header:

UsernameToken Ajout d'un token userName <wsse:UsernameToken...
Timestamp Ajout d'un horodateur <wsu:Timestamp...

Le paramètre timeToLive permet de définir la durée de validité du timestamp en secondes

Le paramètre passwordType spécifie si le mot de passe est en clair (PasswordText) ou crypté (PasswordDigest)

Le paramètre addUTElements (avec s) permet de rajouter les éléments

Nonce <wsse:Nonce>... Valeur aléatoire qui fait office de mesure de sécurité contre les 'replay attacks', nécessite un serveur pour stocker les nonce utilisés.
Created <wsu:Created>... Horodateur de création

Plus d'infos sur le UsernameToken ici

Etape 2: Création de la classe de callback

package mon.package;

import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;

/**
 * PWCallback for the Client
 */
public class MonPWCallback implements CallbackHandler {

 /**
   * @see javax.security.auth.callback.CallbackHandler#handle(javax.security.
	 *                                            auth.callback.Callback[])
   */
 public void handle(Callback[] callbacks) throws IOException, 
                                                 UnsupportedCallbackException {
  for (int i = 0; i < callbacks.length; i++) {
   if (callbacks[i] instanceof WSPasswordCallback) {
    WSPasswordCallback pc = (WSPasswordCallback)callbacks[i];
    
    // set the password given a username
    if ("wss4j".equals(pc.getIdentifer())) {
     pc.setPassword("security");
    }
   } else {
    throw new UnsupportedCallbackException(callbacks[i], "Not know Callback");
   }
  }
 }
}

Axis Deployment Tutorial

Site officiel