Bonjour
J'essaie de configurer mon authentification avec un serveur CAS. J'ai réussi toute la première partie à savoir rediriger vers le serveurs et s'authentifier. Mais lorsque l'utilisateur est renvoyé vers la page demandé, le système d'authentification de cake considère que l'utilisateur non connecté ..?
voici mes différents codes:
dans mon appController:
ma class CasAuthenticate:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public $components = array( 'Session', 'Auth' => array( 'loginRedirect' => array('controller' => 'gepadbals', 'action' => 'index'), 'logoutRedirect' => array('controller' => 'users', 'action' => 'login'), 'authenticate' => array('Cas'), 'loginAction' => array('controller'=>'users','action' => 'login')) ); public function beforeFilter() {$this->Auth->allow(array('controller'=>'users','action' => 'login')); }
ma class UsersController:
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 <?php App::uses('BaseAuthenticate', 'Controller/Component/Auth'); require_once '/usr/share/php/CAS.php'; class CasAuthenticate extends BaseAuthenticate { function initialize(&$controller){$this->controller =$controller;} public function authenticate(CakeRequest $request, CakeResponse $response) { $cas = new phpCAS(); $etablissement = $request->pass; $casHost = null; $domain = null; if(isset($etablissement[0])) { switch ($etablissement[0]) { case 1: $casHost = "cas-ujf.grenet.fr"; $domain = "ujf-grenoble.fr"; break; case 2: $casHost = "cas-upmf.grenet.fr"; $domain = "upmf-grenoble.fr"; break; case 3: $casHost = "cas-ugr3.grenet.fr"; $domain = "u-grenoble3.fr"; break; } //echo $casHost; //redirection vers le serveur CAS pour authentification $cas->client(CAS_VERSION_2_0,$casHost,443,''); $cas->setNoCasServerValidation(); $cas->forceAuthentication(); //enregistrement des informations de session $_SESSION["username"] = $cas->getUser(); $_SESSION["domain"] = $domain; $retour["username"] = $cas->getUser(); $retour["password"] = ""; //Redirection vers index if($cas->checkAuthentication()){return $retour;} else {return false;} } } /** * Fonction de connexion * @return type */ public function login() {return true;} }
mon model User:
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 <?php class UsersController extends AppController { /** * Fonction de connexion * @return type */ public function login() { //$this->set('options', array('ujf-grenoble.fr' => 'U1', 'upmf-grenoble.fr' => 'U2', 'u-grenoble3.fr' => 'U3')); //if ($this->request->is('post')) // { if ($this->Auth->login()) { $this->User->username = $_SESSION["username"]; $this->User->password = "test"; $login = $this->User->username; return $this->redirect($this->Auth->redirect()); } else {$this->Session->setFlash(__("Nom d'user ou mot de passe invalide, réessayer"));} // } } /** * Fonction de déconnexion * @return type */ public function logout() {return $this->redirect($this->Auth->logout());} }
Petite précision, je n'utilise pas de base de données pour l'utilisateur d'ou mon public $useTable = false; dans le modèle.
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 <?php App::uses('SimplePasswordHasher', 'Controller/Component/Auth'); class User extends AppModel { public $name = 'User'; public $useTable = false; // Définition du schéma modèle var $_schema = array ( 'username' => array ( 'type' => 'string', 'length' => 30 ), 'password' => array ( 'type' => 'string', 'length' => 30 ) ); } ?>
Lorsque j'essaie de mauthentifier via le cas cela fonctionne , le système renvoie vers mon index mais la je ne suis pas autorisé donc ilme renvoie vers le login mais qui ne renvoie pas vers CAS car je suis déjà authentifé au niveau du CAS (heureusement au moins cela fonctionne )
J'ai cherché dans tout les sens, essayé plusieurs autres méthodes mais je ne vois pas ce qui coince...
Merci de toute aide ou suggestion, idées etc...
Partager