web-dev-qa-db-fra.com

Comment utiliser Windows Login pour une connexion unique et pour les entrées Active Directory pour Desktop Java Application?

J'aimerais avoir mon bureau Java application pour avoir une connexion unique sur les utilisateurs Active Directory. En deux étapes, j'aimerais:

  1. Assurez-vous que l'utilisateur particulier s'est connecté à Windows avec une entrée utilisateur.
  2. Découvrez certaines informations de configuration pour cet utilisateur à partir de l'Active Directory

Avec Java: moyen programmatique de déterminer l'utilisateur de Windows actuel Je peux obtenir le nom de l'utilisateur Windows actuel, mais puis-je compter à cela? Je pense que le

System.getProperty("user.name")

ne sera pas assez sécurisé? ("utilisateur.name" semble être provenant des variables d'environnement, donc je ne peux pas compter sur cela, je pense?)

Question Authentification contre Active Directory avec Java sur Linux Fournissez-moi l'authentification pour Nom + Pass, mais je voudrais authentifier en fonction de la connexion Windows?

Pour l'accès Active Directory, LDAP serait probablement le choix?

30
Touko

Ce n'est pas pris en charge. Java 6 a des améliorations, mais pas assez encore.

Java a sa propre pile GSS. Le problème est destiné à une connexion unique, vous devez obtenir le ticket Kerberos à partir du système d'exploitation (pas le Java Stack). Sinon, l'utilisateur doit authentifier une seconde fois (vaincre le but de célibataire se connecter).

Regardez - http://java.sun.com/developer/technicalarticles/j2se/security/ . Regardez sur "Access Native Gss-API" et il parle d'une nouvelle propriété système Sun.Security.jgss.natif, qui est définie sur True Causes Java pour utiliser la mise en œuvre du système d'exploitation sous-jacente, donnant Accès à l'authentification au niveau du système d'exploitation. Parfait! .... Sauf que c'est uniquement pris en charge pour Solaris et Linux, pas Microsoft Windows.

Java 6 ne semble toutefois avoir suffisamment de support pour agir en tant que serveur recevant des demandes d'authentification SPNEGO à partir de IE puis authentifiant cet utilisateur contre Active Directory. Son juste le support client de bureau est toujours incomplet.

13
Alan Kent

Utilisez JAAS avec un LDAP LoginModule . Cela vous permettra de brancher le sous-jacent =Java Infrastructure de sécurité.

Lorsque vous devez prendre l'application hors ligne ou "débogage" de l'application, vous pouvez facilement échanger le module LDAP pour un module factice. Cela vous permet de continuer à tester votre "sécurité", sans dépendre de Active Directory. Très testable, découplé, et vous pouvez le schéma d'authentification ultérieurement avec presque pas de chagrin.

5
James Schek

Projet Waffle a à la fois un code côté client et serveur pour faire SSO sous Windows. Il est basé sur la JNA, aucune bibliothèque indigène requise.

4
dB.

Avez-vous envisagé d'utiliser l'API de la JNA (vous permet de faire des appels autochtones vers le système d'exploitation facile)?

Vous pouvez appeler la documentation Win32 METOD GetCurrentUser MSDN Documentation à http://msdn.microsoft.com/en-us/library/ms724432 (vs.85) .aspx . Il est situé à l'intérieur d'Advapi32.dll.

Il possède également une version Unicode, getcurrentuserw si nécessaire.

Et vous avez raison. Il semble que la variable d'environnement puisse être modifiée, de sorte que cela peut être trompeur à utiliser.

Je ne suis pas sûr des implications croisées sur la plate-forme sur 32/64 bits. Si vous avez besoin de la solution dans le code, je suis sûr que je pouvais écrire quelque chose pour cela.

Mais oui, juste une idée :)

0
guyumu

Vous obtiendrez probablement la plus grande flexibilité en utilisant Sécurité de printemps . Vous pouvez l'utiliser avec une authentification JAAS et LDAP.

0
Bogdan

Vérifiez JCIFS AT http://jcifs.samba.org/

Autre que cela, coller avec LDAP (en fait, il devrait être mon premier essai, mais ...)

0
aldrinleal