2009-01-23 6 views
1

J'ai un problème avec jaas et jboss. J'essaie d'authentifier les utilisateurs par rapport à une base de données en utilisant une méthode basée sur un formulaire mais jboss me dit que le mot de passe est faux (non, le mot de passe est correct), mais si j'utilise UsersRolesLoginModule avec des fichiers de propriétés, pas de problème.Problème avec JAAS et DatabaseServerLoginModule

Dans la base de données pg en mode débogage la requête qui fait JBoss semble ok, Le mot de passe dans la base de données sont pour l'instant dans le texte brut (sans hachage)

Voici mon fichier login-config.xml

<application-policy name = "AP"> 
     <authentication> 
      <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> 
      <module-option name = "dsJndiName">java:/authDS</module-option> 
      <module-option name = "principalsQuery">SELECT password FROM users WHERE login = ?</module-option> 
      <module-option name = "rolesQuery">SELECT roles.name AS roles FROM roles WHERE roles.id IN 
         (SELECT users_roles.roleid FROM users_roles WHERE users_roles.userid IN 
         (SELECT users.id FROM users WHERE login = ?))</module-option> 
      <!-- <module-option name="hashAlgorithm">MD5</module-option> --> 
      <!-- <module-option name="hashEncoding">base64</module-option> --> 
      <!-- <module-option name="hashEncoding">HEX</module-option> --> 
      <!-- <module-option name="hashAlgorithm">SHA-1</module-option> --> 
      <!-- <module-option name="digestCallback">com.myclass.MyDigestCallback</module-option>--> 
      </login-module> 
     </authentication> 
    </application-policy> 

fichier web.xml:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Restrict Access</web-resource-name> 
     <description></description> 
     <url-pattern>/admin/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>AdminRole</role-name> 
    </auth-constraint> 
    </security-constraint> 

    <login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>ASM AD Authentication</realm-name> 
    <form-login-config> 
    <form-login-page>/login.jsp</form-login-page> 
    <form-error-page>/login.jsp</form-error-page> 
     </form-login-config> 
    </login-config> 

    <security-role> 
     <role-name>AdminRole</role-name> 
    </security-role> 

jboss-web.xml

<jboss-web> 
     <security-domain>java:/jaas/Admin</security-domain> 
</jboss-web> 

login.jsp

<form method="post" action="j_security_check"> 
    <fieldset> 
     <legend>Login</legend> 
     <p> 
      <label for="form-username">Username</label> 
      <input type="text" name="j_username" id="form-username" /> 
     </p> 
     <p> 
      <label for="form-password">Password</label> 
      <input type="password" name="j_password" id="form-password" /> 
     </p> 
     <p> 
      <input type="submit" value="GO" /> 
     </p> 
    </fieldset> 
</form> 
+0

Avez-vous trouvé cela résolu? si oui serait intéressé à voir votre résolution :) – simgineer

Répondre

1
<application-policy name = "AP"> change to <application-policy name = "Admin"> 

OU

<security-domain>java:/jaas/Admin</security-domain> change to 

<security-domain>java:/jaas/AP</security-domain> 
1

Pouvez-vous faire quelque chose comme ça?

<application-policy name = "AP"> 
     <authentication> 
      <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> 
      <module-option name = "dsJndiName">java:/authDS</module-option> 
      <module-option name = "principalsQuery">SELECT password FROM users WHERE login = ? and idcompania=? </module-option> 
      <module-option name = "rolesQuery">SELECT roles.name AS roles FROM roles WHERE roles.id IN 
             (SELECT users_roles.roleid FROM users_roles WHERE users_roles.userid IN 
             (SELECT users.id FROM users WHERE login = ? and idcompania=?))</module-option> 
      <!-- <module-option name="hashAlgorithm">MD5</module-option> --> 
      <!-- <module-option name="hashEncoding">base64</module-option> --> 
      <!-- <module-option name="hashEncoding">HEX</module-option> --> 
      <!-- <module-option name="hashAlgorithm">SHA-1</module-option> --> 
      <!-- <module-option name="digestCallback">com.myclass.MyDigestCallback</module-option>--> 
      </login-module> 
     </authentication> 
    </application-policy> 
0

à partir de votre exemple, vous devez utiliser la mise en œuvre DatabaseServerLoginModule pour l'authentification:

  • dans le web.xml vous n'avez pas besoin en utilisant la balise REALM.
  • Vous devez définir le domaine de sécurité que vous utilisez dans jboss-web.xml.
  • Vous n'avez pas besoin d'utiliser le module d'option [digestCallback].
  • Faites attention aux rôles définis dans web.xml et à la contrainte de sécurité en général.

J'espère que cela vous aidera bien.