2010-06-26 9 views
1

J'essaie d'utiliser JAAS dans Glassfish pour gérer l'authentification et l'autorisation dans mes applications Web par rapport à Active Directory. Tout d'abord j'ai écrit quelques programmes POJO qui peuvent se connecter avec succès à mon AD et s'authentifier contre les utilisateurs et les groupes que j'ai configurés. Je suis donc confiant que les noms d'utilisateur, les mots de passe et les groupes que j'utilise dans mon application web sont corrects.Glassfish JAAS répertoire actif

Je suis This tutorial pour configurer un domaine dans Glassfish pour gérer l'authentification et l'autorisation dans ma webapp. J'ai modifié mon web.xml et sun-web.xml avec mes données que je veux.

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>myapp</display-name> 
<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>activedirectory</realm-name> 
    <form-login-config> 
    <form-login-page>/login.jsp</form-login-page> 
    <form-error-page>/error.html</form-error-page> 
    </form-login-config> 
</login-config> 
<security-role> 
    <role-name>authorized</role-name> 
</security-role> 
<security-constraint> 
    <display-name>Security</display-name> 
    <web-resource-collection> 
    <web-resource-name>Secured</web-resource-name> 
    <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
    <role-name>authorized</role-name> 
    </auth-constraint> 
    <user-data-constraint> 
<transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 
</web-app> 

et mon soleil web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd"> 
<sun-web-app error-url=""> 
    <context-root>/myapp</context-root> 
    <security-role-mapping> 
<role-name>authorized</role-name> 
<group-name>Test</group-name> 
    </security-role-mapping> 
    <class-loader delegate="true"/> 
    <jsp-config> 
    <property name="keepgenerated" value="true"> 
     <description>Keep a copy of the generated servlet class java code.</description> 
    </property> 
    </jsp-config> 
</sun-web-app> 

Mon royaume

name: activedirectory 
class name: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm 
JAAS context: ldapRealm 
Directory: ldap://myADServersIPAddress:389 
Base DN: DC=myAD,DC=com 
search-filter    (&(objectClass=user)(userPrincipalName=%s)) 
search-bind-password  fakepasswordhere 
group-search-filter  (&(objectClass=group)(member=%d)) 
search-bind-dn   DN=Administrator 

Le message d'erreur que je reçois dans mes journaux quand je me connecte et échoue est

Login failed: javax.security.auth.login.LoginException: 
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID- 
0C090290, comment: AcceptSecurityContext error, data 525, v893] 

J'ai fait quelques recherches sur le code d'erreur "data 525" et apparemment cela signifie que le nom d'utilisateur n'est pas valide. J'utilise un identifiant et un mot de passe que je sais être valide et je sais que c'est un membre de "Test" tel que défini dans mon sun-web.xml. J'ai essayé le format userPrincipal (nom d'utilisateur @ domaine) avec les paramètres actuels ainsi que le formulaire sAMAccountName (domaine \ nom d'utilisateur) sans succès. J'ai également changé search-filter dans mon domaine pour utiliser sAMAccountName où userPrincipalName est et qui n'a pas fonctionné en utilisant les deux combos non plus. Quelqu'un a-t-il des indices ou des suggestions? J'ai l'impression d'avoir fait de la recherche et je suis très proche, mais très coincé à ce stade. Merci si quelqu'un prend le temps de lire tout ça!

Répondre

1

Ce que je testerais peut-être vos identifiants de recherche, puisque vous recherchez basé sur DN = Administrateur, non? Avez-vous essayé de lui donner le plein dn au compte d'administrateur pour le search-bind-dn? Typiquement par défaut cela serait DN=Administrator, CN=Users, DC=myAD, DC=com basé sur vos informations ci-dessus.

0

Je suis d'accord avec REW - mon search-bind-dn devait être entièrement qualifié pour que l'ID de liaison de recherche fonctionne.