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!