Question

Voici le scénario. Je suis le code exécuté sur un serveur web dans un domaine AD. Certains clients me est connecté. Comment puis-je obtenir le nom d'utilisateur de ce client, sans avoir le remplissage du client un formulaire dans leur navigateur? Vous devez utiliser les technologies Java sur le côté serveur web.

edit:

Je fini par utiliser la sécurité Spring Négociez filtre comme décrit sur le lien ci-dessous. Il y a un tutoriel disponible. En utilisant request.getPrincipal (). GetName () à partir d'un servlet donne le nom d'utilisateur.

http://waffle.codeplex.com/

Était-ce utile?

La solution

Vous devez configurer le Spring Security extension de Kerberos - c'est la seule sur le chemin de la boîte pour faire ce que vous décrivez dans Spring Security 3. ce soutien négociation SPNEGO, mais nécessite une certaine quantité de configuration sur le serveur (et la connaissance de la façon dont fonctionne SPNEGO et Kerberos).

Il n'y a pas beaucoup de documentation -. Mais des exemples d'applications de Mike qu'il est livré avec 1.0M2 sont grands et couvrent la plupart des scénarios communs, y compris l'authentification SPNEGO automatique

La chose clé pour SPNEGO est de mettre en place un AuthenticationEntryPoint personnalisé - vous aurez besoin de faire cela avec un grain de printemps personnalisé comme suit:

<bean id="kerbEntryPoint" class="org.springframework.security.extensions.kerberos.web.SpnegoEntryPoint" />

<bean id="kerbAuthenticationProcessingFilter" class="org.springframework.security.extensions.kerberos.web.SpnegoAuthenticationProcessingFilter">
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

... il y a plus de haricots qui va être nécessaires en plus ces (encore une fois, reportez-vous aux échantillons w / l'extension Kerberos). Republier si vous progresserons avec Spring Security ou si vous voulez des détails précis (car il y a un certain nombre de haricots / config de bits impliqués, une certaine connaissance de votre configuration serait utile, par exemple, si vous utilisez le style d'espace de noms <http> ou non ).

Autre que cette option, vous devez mettre en place un type similaire de SPNEGO auth (telles que l'utilisation gaufre, comme vous le suggérez) - d'autres questions SO couvrent ce assez bien.

Enfin, vous pourriez peut-être avant Tomcat avec un autre serveur Web qui prend en charge SPNEGO ou NTLM mieux, tels que Microsoft IIS ou Apache Web Server avec mod_spnego .

Si tout va bien une de ces idées fonctionnerait pour vous!

Autres conseils

Quel navigateur vos utilisateurs en utilisant? Si IE; il y a une solution simple:

<html>
<script type="text/javascript">
var WinNetwork = new  ActiveXObject("WScript.Network");
alert(WinNetwork.UserName);
</script>
</html>

La dernière façon pour Windows de le faire est SPNEGO . Pour le faire fonctionner pleinement vous devez vous serveur pour avoir un compte dans AD, et communiquer avec Kerberos. Ensuite, Spring Security, on m'a dit, supporte.

Maintenant, pas toujours vous devez autoriser les utilisateurs. Parfois (par exemple pour des raisons statistiques), il suffit d'obtenir l'AD ID de l'utilisateur. Quand je jouais avec SPNEGO, les données binaires qui a été transmis à partir du navigateur ont été notamment l'ID utilisateur en texte clair. Il peut être extrait à partir de là, mais ne peut pas faire confiance bien sûr.

NTLM est obsolète, considéré comme moins sûr, et largement déployé à partir de l'environnement.

Si vous utilisez Tomcat, puis utilisez WAFFLE .

Je parie que vous pouvez mettre le serveur web Apache devant tomcat si apache peut authentifier à l'aide NTLM ou Kerberos . Ensuite, vous pouvez utiliser des règles rewrite aux demandes envoyées à tomcat avec nom d'utilisateur dans la plaine. Ceci est juste une idée, je n'ai pas mis en œuvre moi-même. Cependant, nous utilisons l'authentification Kerberos Apache dans notre intranet. Ma suggestion est de ne pas utiliser NTLM, elle est dépassée et squameuse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top