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

Langage PHP Discussion :

Authentification NTLM et variable POST


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut Authentification NTLM et variable POST
    Bonjour,

    Je sollicite votre aide car je suis arrivé à un point pour lequel je ne sais que faire ! J'ai beau chercher, "trifouiller", modifier, changer d'idée et je ne trouve toujours pas la solution.

    Bref, voici mon problème :

    J'utilise dans le cadre d'une application php/mysql intranet, un système d'authentification NTLM pour récuperer le login de session windows de l'utilisateur de l'application. J'ai donc fait des recherches sur ce système d'authentification, et j'ai trouvé une source me permettant de récuperer "nom de domaine" et "login" comme prévu.

    J'adapte et je modifie selon mes besoins la source pour intégration dans mon application et à ce moment la, un problème survient ! En effet, maintenant que j'utilise l'authentification NTLM, toutes les variables de formulaire envoyées par method POST ne sont plus prises en compte; lors de l'envoi, elles sont vides ... (so , crazy !)

    Apres de multiples recherches google, certaines sources disent qu'il faut modifier le header, d'autres modifier la configuration du serveur, bref tout cela reste abstrait.

    Je m'en remet à vous pour trouver une solution, sachant qu'il s'agit juste d'un problème de méthod POST.

    Pour information voici la source :

    Fichier ntlm.php

    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
     
    <?php
     
    define('_NTLM_AUTH_FAILED',1);
    define('_NTLM_PROXY',2);
     
    function getInfosFromNTLM() {
    	@session_start();
     
    	if (!empty($_SERVER['HTTP_VIA'])) {
    		return _NTLM_PROXY;
    	}
     
    	$header = apache_request_headers();
    	$auth = isset($header['Authorization']) ? $header['Authorization'] : null;
     
    	if (is_null($auth)) {
    		return unAuthorized();
    	}
     
    	if ($auth && (substr($auth,0,4) == 'NTLM')) {
     
    		$c64 = base64_decode(substr($auth,5));
    		$state = ord($c64{8});
     
    		switch ($state) {
     
    			case 1:
    				$chrs = array(0,2,0,0,0,0,0,0,0,40,0,0,0,1,130,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0);
    				$ret = "NTLMSSP";
    				foreach ($chrs as $chr) {
    					$ret .= chr($chr);
    				}
    				return unAuthorized(trim(base64_encode($ret)));
    				break;
     
    			case 3:
    				$l = ord($c64{31}) * 256 + ord($c64{30});
    				$o = ord($c64{33}) * 256 + ord($c64{32});
    				$domain = str_replace("\0","",substr($c64,$o,$l));
     
    				$l = ord($c64{39}) * 256 + ord($c64{38});
    				$o = ord($c64{41}) * 256 + ord($c64{40});
    				$user = str_replace("\0","",substr($c64,$o,$l));
     
    				return array('domain'=>$domain,'user'=>$user);
     
    				break;
     
    		}
     
    	}
    }
     
    function unAuthorized($msg=null) {
    	$ntlm = 'WWW-Authenticate: NTLM';
    	if ($msg) {
    		$ntlm .= ' '.$msg;
    	}
    	header('HTTP1.0 401 Unauthorized');
    	header($ntlm);
     
    	return _NTLM_AUTH_FAILED;
    }
     ?>
    Fichier index.php : dans lequel je recupere le login dans une variable de session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    require_once('ntlm.php');
     
    $infos = getInfosFromNTLM();
     
    switch ($infos) {
    	case _NTLM_PROXY:
    		die('No proxy for ntlm');
    	case _NTLM_AUTH_FAILED:
    		die('Sorry NTLM auth failed');
    	default:
    		print_r($infos);
    		break;
    }
    Merci à tous !

    Cordialement

  2. #2
    Membre actif Avatar de JmL40
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    348
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 348
    Points : 246
    Points
    246
    Par défaut
    Je pense avoir résolu le problème du moins contourné la situation, en isolant le script NTLM dans un autre dossier que le dossier de l'application. J'ai ensuite appliqué une redirection avec la fonction header() vers la page d'index de mon application.

    En fait, l'authentification NTLM associée à des variables de formulaires de type POST et donc mon problème, s'applique à tous les formulaires contenus dans des les sous-dossiers du dossier parent contenant le script php NTLM.

    J'ai donc tout simplement isolé mon script et effectué ma redirection !

    On peut tout de même garde le principe que je propose que j'utilisais au début en changeant de header : header(WWW-application : basic) > à placer au début du fichier de la page de login.

    Voila tout, si vous avez des propositions je suis quand même à votre écoute ...

    Cordialement

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

Discussions similaires

  1. Vérifier le type d'une variable postée
    Par kespy13 dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2006, 10h50
  2. Variable POST
    Par Linoa dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2006, 19h48
  3. Réponses: 22
    Dernier message: 17/03/2006, 22h42
  4. Réponses: 9
    Dernier message: 15/03/2006, 11h46
  5. variable POST
    Par zooffy dans le forum Langage
    Réponses: 5
    Dernier message: 07/03/2006, 19h15

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