Bonjour !
Cela faisait longtemps que je n'étais pas venu dans ces contrées...
Voici mon problème.
On utilise actuellement un handler Axis 1.4 pour protéger l'accès à des services web jax-rpc. Par 'protéger', j'entends :
- côté client :
- authentifier les requêtes avec une assertion SAML ;
- signer le corps des requêtes ;
- vérifier l'identité du service qui a répondu ;
- vérifier la signature des réponses ;
- côté serveur :
- vérifier l'identité du l'émetteur d'une requête (via l'assertion SAML jointe) ainsi que son autorisation ;
- vérifier la signature des requêtes ;
- communiquer certains paramètres du client à l'application ;
- authentifier les réponses avec une assertion SAML ;
- signer les réponses.
Le handler est développé complètement à part des applications. Il est juste rajouté au déploiement sur le serveur.
J'ai donc 4 cas à distinguer :
- requête émise par le client ;
- requête reçue par le service ;
- réponse retournée par le service ;
- réponse reçue par le client.
Bien évidemment, un service web peut être lui-même client d'un autre, ce qui fait que le même handler doit pouvoir gérer tous les cas.
Avec Axis 1.4, je peux distinguer ces 4 cas en jouant sur :
- MessageContext.getPastPivot() -> requête / réponse ;
- MessageContext.isClient() -> client / serveur.
Les technologies évoluant, il nous faut maintenant protéger des services JAX-WS. On a donc étendu SOAPHandler et utilisé la propriété MESSAGE_OUTBOUND_PROPERTY pour différencier le cas requête / réponse. Mais je ne trouve pas d'équivalent au MessageContext.isClient().
Là est ma question : comment différencier le cas client / serveur ?
Merci d'avance.
Partager