# Anmeldung an eine Active Directory?



## alaska94 (20. Jul 2006)

Hallo Folks,

ich habe kaum Ahnung von Java.
Aber ich muss umbedingt ein  Java App schreiben, was Eingaben gegen die Benutzerdaten in einer Active Directory authentifiziert.

Ich möchte mittels Eingabe eines Benutzernamen und eines Passwortes überprüfen, ob dieser Benutzer sich an der Active Directory anmelden kann oder nicht.
Kennt einer eine super einfache Anleitung dafür?
Oder kann mir einer von Euch schnell Quellcode für dieses Problem posten?, am besten mit Kommentaren!!

Danke schonmal.

Gruß

Alaska


----------



## Caffè Latte (20. Jul 2006)

Hi,

so vielleicht (nicht von mir ):


```
import java.security.Principal;
import java.security.PrivilegedAction;
import java.util.Iterator;
import java.util.Set;

import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;

import principal.JaasRolePrincipal;

import com.sun.security.auth.callback.TextCallbackHandler;

/**
 * This Application authenticate a user and let him start the LoginAction if his
 * right support it.
 * @author Orientation in Objects GmbH
 */
public class LoginJaas {

	private static Subject mySubject;

	/**
	 * Create a <code>LoginContext</code> with the specified configuration
	 * (oiojaas. conf) and policy (oiojaas.policy).
 Let the user login to
	 * the application. Gets the users domain roles from
	 * <code>GetRole</code>

	 * 
 Run the <code>LoginAction</code>
	 * @see LoginAction
	 * @see GetRole
	 * @param args not used
	 */
	public static void main(String[] args) {

		LoginContext lc = null;

		try {
			lc = new LoginContext("LoginJaas", new TextCallbackHandler());

		} catch (LoginException le) {
			System.err.println(
				"Cannot create LoginContext. " + le.getMessage());
			System.exit(-1);
		} catch (SecurityException se) {
			System.err.println(
				"Cannot create LoginContext. " + se.getMessage());
			System.exit(-1);
		}

		try {
			lc.login();

		} catch (LoginException le) {

			System.err.println("Error at Authentication:");
			le.printStackTrace();
			System.exit(-1);

		}

		System.out.println("Authentication succeed!");

		setMySubject(lc.getSubject());

		addRoleToSubject(
			(Principal) getMySubject().getPrincipals().iterator().next());
		printPrincipals(getMySubject().getPrincipals());

		PrivilegedAction action = new LoginAction();
		Subject.doAs(getMySubject(), action);

		try {
			lc.logout();
		} catch (LoginException le) {
			System.err.println("Error at Logout:");
			le.printStackTrace();
		}
	}

	private static void printPrincipals(Set myPrincipalsSet) {
		Principal principal;
		Iterator myIt = myPrincipalsSet.iterator();
		while (myIt.hasNext()) {
			principal = (Principal) myIt.next();
			System.out.println(
				"principal classname: "
					+ principal.getClass().getName()
					+ " - value: "
					+ principal.getName());
		}

	}

	private static void addRoleToSubject(Principal principal) {
		GetRole getRole = new GetRole();
		getRole.scanRole(principal.getName());

		if (getRole.getRoleAsEnumeration() != null) {
			String fullRoleName;
			String roleName;
			while (getRole.getRoleAsEnumeration().hasMoreElements()) {
				fullRoleName =
					getRole.getRoleAsEnumeration().nextElement().toString();

				if (fullRoleName.indexOf("CN") != -1) {
					roleName =
						fullRoleName.substring(
							fullRoleName.indexOf("CN") + 3,
							fullRoleName.indexOf(","));
					JaasRolePrincipal jrp = new JaasRolePrincipal(roleName);
					getMySubject().getPrincipals().add(jrp);
				}

			}
		} else {
			System.out.println("user has no roles");
		}
	}

	/**
	 * Returns the user Subject.
	 * @return Subject
	 */
	private static Subject getMySubject() {
		return mySubject;
	}

	/**
	 * Sets the user Subject.
	 * @param mySubject The mySubject to set
	 */
	private static void setMySubject(Subject mySubject) {
		LoginJaas.mySubject = mySubject;
	}

}
```

Wenn das in die richtige Richtung geht, dann lies mal hier. Super einfach ist das IMHO nicht, aber verständlich - sogar für mich als Anfänger.

Hoffe es hilft ...


----------



## alaska94 (20. Jul 2006)

Danke,

aber irgentwie funktioniert das nicht wirklich bei mir.


----------



## Caffè Latte (20. Jul 2006)

alaska94 hat gesagt.:
			
		

> aber irgentwie funktioniert das nicht wirklich bei mir.



_Irgendwie_ ist eine der eindeutigsten Fehlerbeschreibungen die ich kenne ...


----------



## alaska94 (20. Jul 2006)

```
PrivilegedAction action = new LoginAction();
```
Hier meldet mir Eclipse:

*LoginAction cannot be resolved to a typ*

Hier das Gleiche nur mit Get Role.

```
GetRole getRole = new GetRole();
```

Eclipse kennt wohl diese beiden Objekte nicht.


----------



## Caffè Latte (20. Jul 2006)

Hi,

klar kommt der Fehler, da ich diese Klassen hier nicht reingeschrieben habe. Hol dir mal das Beispiel unter dem oben genannten Link und pass es deinen Bedürfnissen an.


----------

