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

Sécurité Java Discussion :

probleme avec jaas et les permissions


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut probleme avec jaas et les permissions
    salut j'ai essayé de gérer la notion des permission avec jaas à l'aide d'un simple exemple
    voici ma classe de test:
    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
     
    public static void main(String[] args) {
    		 boolean result = false;
    		    try 
    		    {
    		    	//-Djava.security.auth.login.config=C:\JAAS\src\fileLogin.config
    		      System.setProperty("java.security.auth.login.config", "c:\\MonitoringJMX.config");
    		      LoginCallback loginCallback=new LoginCallback("user","motDePasse");
    		      LoginContext loginContext = new LoginContext("Login",loginCallback);
    		      loginContext.login();
    		      System.out.println("Le principal="+loginContext.getSubject().getPrincipals().iterator().next().getName());
    		      result=true;
    		      System.out.println("Authentification=="+result);
    		      try
    				{
    				AccessController.checkPermission(new PermissionImpl("admin"));
    				System.out.println("Authorisation success!!!!!!!!");
    				}catch (AccessControlException e) {
    					e.printStackTrace();
    					System.out.println("Authorisation failed!!!!!!!!");
    				}
    		      loginCallback=null;
    		    }
    		   catch (Exception e) {
    			   e.printStackTrace();
    		     System.out.println("login failed");
    		     result = false;
    		   }
     
    	}
    le fichier policy est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    grant Principal jaas.fileLogin.MyPrincipalRole "user"{
      permission jaas.fileLogin.PermissionImpl "admin";
    };
    j'ai ajouter l'argument:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Djava.security.policy=C:\NesNes.policy
    l'authentification va bien mais j'obtient toujours l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    java.security.AccessControlException: access denied (jaas.fileLogin.PermissionImpl admin)
    Authorisation failed!!!!!!!!
    	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
    	at java.security.AccessController.checkPermission(AccessController.java:427)
    	at Test.main(Test.java:33)
    ou est le probleme?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Tu as oublié une partie importante : après l'authentication (que tu as faite) tu dois faire l'autorisation, ce qui est fait par les méthode du genre "doAsPrivileged", regarde le turoriel JAAS pour un exemple : http://java.sun.com/javase/6/docs/te...AcnAndAzn.html

    A plus

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par George7 Voir le message
    Salut,

    Tu as oublié une partie importante : après l'authentication (que tu as faite) tu dois faire l'autorisation, ce qui est fait par les méthode du genre "doAsPrivileged", regarde le turoriel JAAS pour un exemple : http://java.sun.com/javase/6/docs/te...AcnAndAzn.html

    A plus
    salut George,
    à propos l'authorisation, je ne l'ai pas oublié
    en effet,ce que je connait est l'authorisation consiste à affecter les principal au subject puis controler l'acces au ressources(ce control peut être fait à l'aide de doAsPrivilegedou à l'aide de AccessController.checkPermission(permission); comme j'ai fait)
    j'ai affecter les principal dans la methode commit de mon LoginModule:
    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
    public boolean commit() throws LoginException {
     
    		if (!succeeded) {
    			userName = null;
    			return false;
    		}
    		namePrincipal = new MyPrincipalRole(userName);
    		if (!subject.getPrincipals().contains(namePrincipal)) {
    			{
    				subject.getPrincipals().add(namePrincipal);
    				System.out.println("commit done");
    			}
    		}
    		for(int i=0;i<subject.getPrincipals().size();i++)
    			System.out.println("Principal num "+i+" ="+subject.getPrincipals().iterator().next().getName());
    		userName = null;
    		commitSucceeded = true;
    		return true;
    	}
    une autre chose :j'ai constaté que lorsque je modifier mon fichier policy(je fait grant sans indiquer le Principal en question):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    grant {
      permission jaas.fileLogin.PermissionImpl "admin";
    };
    les choses vont bien
    c'est comme si le grant n'affecte pas le principal désiré malgré que j'ai bien vérifié le principal de l'utilisateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i=0;i<subject.getPrincipals().size();i++)
    			System.out.println("Principal num "+i+" ="+subject.getPrincipals().iterator().next().getName());
    pouvez vous m'aider à déterminer l'erreur

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok au temps pour moi j'avais pas vu ton module
    Juste par curiosité, je peux voir ta classe Principal ?

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par George7 Voir le message
    Ok au temps pour moi j'avais pas vu ton module
    Juste par curiosité, je peux voir ta classe Principal ?
    voici ma classe principal:
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    package jaas.fileLogin;
     
    import java.io.*;
    import java.security.Principal;
     
     
    /**
     *
     * @author  Riadh
     * @version 1.0
     */
    public class MyPrincipalRole implements Principal, Serializable
    {
     
     
    	private static final long serialVersionUID = 1L;
    	protected String name;
     
    	/**
             * Création d'un MyPrincipalRole avec un nom.
             *
             * <p>
             *
             * @param nom du principal.
             * @exception NullPointerException si <code>name</code>
             *                      est <code>null</code>.
             */
    	public MyPrincipalRole(String name)
    	{
    		if (name == null) {
    			throw new NullPointerException("Illegal null name");
    		}
    		this.name = name;
     
    	}
     
     
     
    	public boolean equals(Object another)
    	{
    		if (!(another instanceof MyPrincipalRole)) {
    			return false;
    		}
    		return ((MyPrincipalRole) another).getName().equals(name);
    	}
     
     
    	public void setName(String name)
    	{
    		this.name = name;
    	}
     
    	/**
             * Retourne le nom du <code>MyPrincipalRole</code>.
             *
             * <p>
             *
             * @return le nom du <code>MyPrincipalRole</code>
             */
    	public String getName()
    	{
    		return name;
    	}
    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon là je vois pas trop de problème. Le fait que ça marche quand tu ne précises pas de Principal est normal, car ça signifie que tout le monde reçoit ces permissions, donc même sans authentification ça devrait marcher. As tu essayé avec la méthode doAsPrivileged ?

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

Discussions similaires

  1. 8.10->9.04 probleme avec Xorg et les connexion reseau
    Par Reskibil dans le forum Ubuntu
    Réponses: 1
    Dernier message: 01/06/2009, 10h22
  2. probleme avec le locate (les dates)
    Par tchimou dans le forum Bases de données
    Réponses: 7
    Dernier message: 02/05/2007, 10h35
  3. Réponses: 5
    Dernier message: 10/03/2007, 21h45
  4. [onKeydown] Probleme avec pour detecter les majuscules des minuscules
    Par magnus2005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/09/2006, 22h48
  5. Probleme avec DateDiff pour les années....
    Par angelevil dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 27/03/2006, 09h19

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