2010-07-21 3 views
2

J'ai travaillé sur un projet qui utilise SPNEGO pour avoir Single Sign On pour une application web Java. Pour l'instant, il fonctionne correctement avec Jetty + SPNEGO et Active Directory, donc si vous visitez ma page de test, il peut sortir le auth_user aussi bien que le token Négocier si le navigateur a été configuré correctement.Single Sign On avec Java + Exchange 2007 EWS

La prochaine étape du projet est d'être en mesure de transmettre cet utilisateur et le jeton aux services Web Exchange comme l'authentification pour que je puisse accéder au répertoire d'échange d'utilisateurs distants (courrier, contacts, etc.)

J'ai exécutez JAX-WS pour générer les fichiers de raccord à partir du fichier Services.wsdl et pouvoir se connecter à Exchange en utilisant ces classes. Le seul problème est qu'il authentifiera uniquement l'utilisateur qui exécute le serveur Web, pas l'utilisateur distant.

J'ai également remarqué que je ne peux pas trouver la bonne classe pour passer le jeton, plutôt que le nom d'utilisateur et le mot de passe pour le serveur Web intégré. De plus, les fichiers générés n'ont aucune référence à SPNEGO.

Est-ce que quelqu'un connaît une solution possible, ou est-ce que je devrais générer les appels SOAP manuellement plutôt que d'utiliser les classes générées?

Merci pour votre temps

Répondre

0

Nous avons réussi à obtenir une solution maintenant en utilisant la bibliothèque Apache HTTP Client 4.1 alpha/Samba JCIFS et en générant les requêtes SOAP. Cela nous permet d'avoir plusieurs utilisateurs connectés sans aucune configuration requise pour leur compte d'échange.

Nous avons utilisé HttpClient 3.1, mais nous avons rencontré des problèmes en raison de la modification du protocole NTLM avec les nouvelles versions de Windows, nous avons donc mis à niveau vers la dernière version.

+0

Donc, vous utilisez la méthode décrite ici? http://hc.apache.org/httpcomponents-client-4.0.1/ntlm.html Comment spécifiez-vous le mot de passe de chaque utilisateur pour l'appel? – Soundlink

1

Je pense, la meilleure façon d'authentifier sur le serveur Web intégré est d'utiliser l'utilisateur qui exécute le serveur Web. Ceci est votre "compte de service" pour les services Web Exchange. Ce compte nécessite le privilège "Exchange Web Services Impersonation" (ms-Exch-EPI-Impersonation).

Si vous souhaitez accéder aux données des utilisateurs distants, vous devez utiliser l'option "Exchange usurpation d'identité" dans vos appels. Pour l'utilisateur du serveur d'échange individuel ("Agir en tant que compte"), vous devez autoriser le compte de service qu'il peut usurper son identité en définissant le privilège "Autoriser l'emprunt d'identité aux informations personnelles Exchange" (ms-Exch-EPI-May-Impersonate). Par conséquent, chaque appel est authentifié à l'aide du même compte de service, mais vous agissez alors comme utilisateur/boîte aux lettres spécifique en utilisant l'emprunt d'identité Exchange dans vos appels.

L'authentification unique de votre webapp est utilisée pour déterminer le compte "Act As Account" à utiliser pour l'usurpation d'identité. Vous avez besoin de l'adresse e-mail ou du SID de l'utilisateur pour cela.

+0

À la minute, j'ai dû générer les demandes SOAP réelles par programme _without_ en utilisant le wsdl. Nous avons eu des problèmes avec les différents utilisateurs connectés en raison de l'utilisation de java.net.Authenticator pour enregistrer les informations d'identification. Je dirais que toute la méthode wsdl/axis ou jax-ws est défectueuse à cause de cela. J'ai essayé de réutiliser les jetons SPNEGO, mais comme je ne l'ai pas généré, il a toujours échoué. – Paul

+0

L'authentificateur n'est initialisé que lors du premier appel. Il doit donc s'agir de l'utilisateur du serveur Web, votre compte de service pour EWS. Je ne pense pas qu'il soit possible d'utiliser chaque utilisateur distant ici. Vous devez ensuite utiliser l'emprunt d'identité Exchange pour effectuer les appels.Je pense que ce mécanisme est identique, si vous utilisez le wsdl pour créer les classes proxy ou générer les demandes SOAP par programme. – Soundlink

Questions connexes