IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wildfly/JBoss Java Discussion :

[LoginModule][Jboss] Comment se servir des Login Module ?


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut [LoginModule][Jboss] Comment se servir des Login Module ?
    Bonjour,

    Je souhaite réaliser ceci en Java :
    - une fenetre d'identification ... si login Ok ... ca charge une fenetre " Bravo... " (par exemple)
    ... si mauvais login ... ca charge une fenetre " Erreur .."

    Context : dans MySQL : utilisateurs(userID Text, passwd Text)
    On me demande d'utiliser les
    "LoginModule" de Jboss pour cela.


    Mon niveau en Java et J2ee étant faible je suis totalement perdu.
    Les infos que je trouve sur le net ne m'aident pas.

    Si il y a quelqu'un qui pourrait m'expliquer pas à pas la démarche pour utiliser ces modules je lui en serait très reconnaissant. (quels fichiers modifier, qu'est ce que je dois déclarer et où ? )


    Amicalement.

  2. #2
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    j'ai cherché plein de documentations, rien de très clair, le seul truc qui m'a un peu aidé c'est ca :
    http://publib.boulder.ibm.com/infoce...ustlogmod.html

    pas trop de rapport avec Jboss mais je m'en inspire...


    mais je ne comprends pas le principe ... à quel moment on demande la saisie du nom d'utilisateurs/password... etc etc...


    qqun saurait m'expliquer plz ?

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    tu peux voir sur ce site pour te donner une premiere idée .

    http://www.javaworld.com/javaforums/...lapsed&sb=5&o=

  4. #4
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Merci pour ton aide Vseb99
    ce lien est tres bien, il m'a aidé à comprendre quelques trucs (notamment sur la fin),

    seulement j'arrive pas à comprendre la démarche globale, pourquoi est ce que l'on met ces bouts de code etc.... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    example2
    {
             org.jboss.security.ClientLoginModule  required;
    org.jboss.security.auth.spi.DatabaseServerLoginModule required;
    };
    et pourquoi on utilise 'ClientLoginModule', et aussi DatabaseServerLoginModule, et sur d'autre sites... ya casiment la meme chose mais avec des UsernamePasswordLoginModule etc....

    et donc je sais pas comment adapter le code à mes besoins ... à savoir utiliser MonPropreLoginModule (Custom Login Module)

    qu'est ce qu'il passe ? on saisie le password et le username .... qui se charge de verifier que ce login est valide dans la Table Mysql ? et pourquoi on me demande d'utiliser un Login Module Jboss alors que cette authentication pourrait etre tres facilement réalisable en envoyant des requetes en dur et voir si elles retournent une Ligne ou pas



    Si ya quelqu'un qui arrive a comprendre comment tout ca fonctionne ...




    [ Modéré par SEMPERE Benjamin ]
    Ajout des balises code
    Les Règles du Forum

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Points : 143
    Points
    143
    Par défaut
    il y a deux solutions:
    soit implémenter son propre loginModule spécifique à JBoss, soit utiliser jGuard qui marche pour tous les servuers d'applications dont jBoss.
    pour ton besoin, les loginModules de JBoss ou de jGuard sont suffisants.
    @+,

    Charles(jGuard team).

  6. #6
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Merci diablo,
    j'ai perdu trop de temps a essayer de comprendre comment ca fonctionne (et je ne sais toujours pas vraiment), j'ai plus le temps d'essayer jguard, mais c'est bon a savoir.


    sinon, j'ai suivi les procédures classique qu'il y a sur le net, mais je sais pas vraiment utiliser ces modules...
    dans mon login-config.xml j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <application-policy name = "monauth">
            <authentication>
                <login-module code="org.jboss.security.ClientLoginModule" flag="required"></login-module>
                        <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                <module-option name = "unauthenticatedIdentity">root</module-option>
                <module-option name = "dsJndiName">java:TestDataSource</module-option>
                <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=? AND expiration>=CURDATE()</module-option>
                <module-option name = "rolesQuery">SELECT ROLEID 'Role', ROLEGROUP as RoleGroup FROM JMS_ROLES WHERE USERID=?</module-option>
            </login-module>
            </authentication>
         </application-policy>
    dans auth.conf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    client-login { org.jboss.security.ClientLoginModule required; 
    };
     monauth { 
    org.jboss.security.ClientLoginModule required; org.jboss.security.auth.spi.DatabaseServerLoginModule 
    required 
    dsJndiName="java:/TestDataSource" 
    principalsQuery="SELECT PASSWD FROM JMS_USERS WHERE USERID=? AND expiration>=CURDATE()"
    rolesQuery="SELECT ROLEID 'Role', ROLEGROUP as RoleGroup FROM JMS_ROLES WHERE USERID=?"; };
    mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    String name = "root";
         String passwordStr = "root";
         char[] password = passwordStr.toCharArray();
         System.setProperty("java.security.auth.login.config", "/usr/local/jboss-4.0.3SP1/server/default/conf/auth.conf");
         LoginContext lc = null;
         try {
             CallbackHandler handler = new UsernamePasswordHandler(name,password);
     
             lc = new LoginContext("monauth", handler);
             System.out.println("Created LoginContext");
             lc.login();
             System.out.println("Logged in.");
     
         } catch (LoginException le) {
             System.out.println("Login failed");
         }
    Et voila l'erreur que j'ai ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Created LoginContext
     
     Login failed
    java.rmi.AccessException: SecurityException; nested exception is: 
        java.lang.SecurityException: Insufficient method permissions, principal=null, ejbName=ContactSessionFacade, method=create, interface=HOME, requiredRoles=[root], principalRoles=null
    J'ai créer un roles root, dans la table j'ai ajouté le role "root" à "root".... (j'ai mis des root partout pour limiter les risques d'erreurs)

    quelqu'un aurait quelques idées svp ?

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 50
    Points : 43
    Points
    43
    Par défaut
    j'avoue que cette partie n'est pas evidente à comprendre.
    nous on a choisi de créé une classe LoginModule qui hérite de DatabaseServerLoginModule.
    C'est dans cette classe que l'on fait les requêtes d'authentification.
    ensuite dans le loginconfig du serveur on appelle cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <application-policy name="mapolicy">
          <authentication>
            <login-module code="toto.LoginModule" flag="required">
              <module-option name="dsJndiName">java:/monjndi</module-option>
              <module-option name="principalsQuery">select PWD, NIVSECU from USER where LOGIN=?</module-option>
              <module-option name="rolesQuery">select 'User', 'Roles' from USER WHERE LOGIN=?</module-option>
            </login-module>
          </authentication>
        </application-policy>
    enfin dans le web.xml de mon appli j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <security-constraint>
        <display-name>SecurityConstraint</display-name>
        <web-resource-collection>
          <web-resource-name>ProtectedArea</web-resource-name>
          <!-- Define the context-relative URL(s) to be protected -->
          <url-pattern>/jsp/*</url-pattern>
          <url-pattern>/servlet/*</url-pattern>
          <url-pattern>/index.jsp</url-pattern>
          <!-- If you list http methods, only those methods are protected -->
          <http-method>DELETE</http-method>
          <http-method>GET</http-method>
          <http-method>POST</http-method>
          <http-method>PUT</http-method>
        </web-resource-collection>
        <auth-constraint>
          <!-- Anyone with one of the listed roles may access this area -->
          <role-name>User</role-name>
        </auth-constraint>
      </security-constraint>
     
      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>java:/jaas/mapolicy</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>User</role-name>
      </security-role>
    ainsi qu'un fichier jboss-web.xml contenant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <jboss-web>
     
       <security-domain>java:/jaas/mapolicy</security-domain>
     
       <!-- Resource Environment References -->
     
       <!-- Resource references -->
     
       <!-- EJB References -->
     
    </jboss-web>
    voila je crois que j'ai rien oublié

  8. #8
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    OK merci de ton aide.

    j'ai rajouté printStackTrace() pour avoir plus de détails sur l'erreur ... ca me donne ca :
    à la ligne du : lc.login();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.security.auth.login.LoginException: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
        at org.jboss.security.auth.spi.DatabaseServerLoginModule.getUsersPassword(DatabaseServerLoginModule.java:133)
        at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:182)
    On initialise comment ? où ?

    j'ai rajouté ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     Properties props = new Properties();
             props.put("java.naming.factory.initial",
                       "org.jnp.interfaces.NamingContextFactory");
             props.put("java.naming.provider.url", "jnp://localhost:1099");
             props.put(Context.URL_PKG_PREFIXES,
                       "org.jboss.naming:org.jnp.interfaces");
             props.put(Context.SECURITY_PRINCIPAL, "root");
             props.put(Context.SECURITY_CREDENTIALS, "root");
             props.put(Context.SECURITY_PROTOCOL, "monauth");
             try {
                 InitialContext ic = new InitialContext(props);
                 System.out.println("InitialContext : " + props);
             } catch (NamingException ex1) {
                 System.out.println("Erreur InitialContext : " + props);
                 ex1.printStackTrace();
             }
    mais ca donne la meme erreur
    quelqu'un sait ?

  9. #9
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Donc j'ai résolu mon problème :

    Dans test-ds.xml, j'ai rajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <datasources>
      <local-tx-datasource>
        <jndi-name>TestDataSource</jndi-name>
        <use-java-context>false</use-java-context>
    
    
    (car peut importe le nom que je mettais en Datasource, il me disait qu'il ne la trouvait pas, avec ca, il la trouve : java:TestDataSource, et aussi TestDataSource il comprend)

    ensuite pour l'initial context ben j'ai rajouté ca dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       String loginconfig = "/usr/local/client/auth.conf";
        String initialfactory = "org.jnp.interfaces.NamingContextFactory";
        String provider_url = "jnp://localhost:1099";
        String factory_url_package = "org.jboss.naming:org.jnp.interfaces";
    
            System.setProperty("java.security.auth.login.config", loginconfig);
            System.setProperty("java.naming.factory.initial", initialfactory);
            System.setProperty("java.naming.provider.url", provider_url);
            System.setProperty("java.naming.factory.url.pkgs", factory_url_package);
    Aussi dans Auth.conf, j'ai retiré le "databaseserverloginmodule" qui, je pense, ne servait a rien ... en fait ca me faisait faire une double autification ^^
    auth.conf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monauth { org.jboss.security.ClientLoginModule required; };
    Ensuite, j'ai eu un problème ... il me disait : requiredRole=[] alors que mes fichiers ejb-jar.xml etc... étaient bien configurés pour que le role requit soit : root
    En fait, c'est une erreur spécifique à Jboss j'ai vu ca sur leur site ...
    la requete des roles dans login-config.xml, le second attribut doit imperativement etre "Roles" partout ... donc la requete doit etre comme ca :

    Login-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <application-policy name = "monauth">
            <authentication>
                        <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                <module-option name = "unauthenticatedIdentity">monauth</module-option>
                <module-option name = "dsJndiName">TestDataSource</module-option>
                <module-option name = "principalsQuery">SELECT PASSWD FROM JMS_USERS WHERE USERID=? AND expiration>=CURDATE()</module-option>
                <module-option name = "rolesQuery">SELECTROLEID as Role, 'Roles'  FROM JMS_ROLES WHERE USERID=?</module-option>
            </login-module>
            </authentication>
         </application-policy>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment JBoss gère les connexions des utilisteurs
    Par Sfaxiano dans le forum Wildfly/JBoss
    Réponses: 7
    Dernier message: 01/04/2010, 16h49
  2. Login Module Jboss/Jboss Portal
    Par Remy.J dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 23/12/2008, 14h38
  3. Comment faire appel à des modules ?
    Par wilsony dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2006, 13h50
  4. Export/import des logins et pwd
    Par Colargole dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 17/07/2003, 16h07
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo