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

Flex Discussion :

NTLM et flex


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut NTLM et flex
    Bonjour les flexeurs et flexseuses!!!!!

    Voila jai envie de récupérer le login de la session windows à partir de mon application flex. Et ceci afin de permettre d'identifier les utilisateurs ou de leurs interdire l'accès.

    J'ai essayé un code PHP en passant par AMF mais il me bloque tout le service AMF(fonctionnel jusqu'à là).
    voici le code 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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    <?php
     
    class MaClasse{
     
    MaFonction(){
     
    $headers = apache_request_headers(); 	// Récupération de l'entête client
     
    if ($_SERVER['HTTP_VIA'] != NULL)
    { // le ntlm ne passe pas par proxy :(
    	$Result = "Proxy bypass!";
    }
    else if($headers['Authorization'] == NULL)
    {				//si l'entete autorisation est inexistante
    	header( "HTTP/1.0 401 Unauthorized" );			//envoi au client le mode d'identification
    	header( "WWW-Authenticate: NTLM" );			//dans notre cas le NTLM
    	exit;							//on quitte
     
    }
    if(isset($headers['Authorization'])) 				//dans le cas d'une authorisation (identification)
    {		
    	if(substr($headers['Authorization'],0,5) == 'NTLM ')
    	{ 	// on vérifit que le client soit en NTLM
     
    		$chaine=$headers['Authorization']; 					
    		$chaine=substr($chaine, 5); 			// recuperation du base64-encoded type1 message
    		$chained64=base64_decode($chaine);		// decodage base64 dans $chained64
     
    		if(ord($chained64{8}) == 1)
    		{					
    		// 		  |_ byte signifiant l'etape du processus d'identification (etape 3)		
     
    		// verification du drapeau NTLM "0xb2" à l'offset 13 dans le message type-1-message (comp ie 5.5+) :
    			//if (ord($chained64[13]) != 178)
    			//{
    			//	echo "NTLM Flag error!";
    			//	exit;
    			//}
     
    			$retAuth = "NTLMSSP".chr(000).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
    			$retAuth .= chr(000).chr(040).chr(000).chr(000).chr(000).chr(001).chr(130).chr(000).chr(000);
    			$retAuth .= chr(000).chr(002).chr(002).chr(002).chr(000).chr(000).chr(000).chr(000).chr(000);
    			$retAuth .= chr(000).chr(000).chr(000).chr(000).chr(000).chr(000).chr(000);
     
    			$retAuth64 =base64_encode($retAuth);		// encode en base64
    			$retAuth64 = trim($retAuth64); 			// enleve les espaces de debut et de fin
    			header( "HTTP/1.0 401 Unauthorized" ); 		// envoi le nouveau header
    			header( "WWW-Authenticate: NTLM $retAuth64" );	// avec l'identification supplémentaire
    			exit;
    		}		
    		else if(ord($chained64{8}) == 3)
    		{
    		// 		       |_ byte signifiant l'etape du processus d'identification (etape 5)
     
    			// on recupere le domaine
    			$lenght_domain = (ord($chained64[31])*256 + ord($chained64[30])); // longueur du domain
    			$offset_domain = (ord($chained64[33])*256 + ord($chained64[32])); // position du domain.	
    			$domain = str_replace("\0","",substr($chained64, $offset_domain, $lenght_domain)); // decoupage du du domain
     
    			//le login
    			$lenght_login = (ord($chained64[39])*256 + ord($chained64[38])); // longueur du login.
    			$offset_login = (ord($chained64[41])*256 + ord($chained64[40])); // position du login.
    			$loginindex = str_replace("\0","",substr($chained64, $offset_login, $lenght_login)); // decoupage du login
     
    			if ( $loginindex != NULL)
    			{				
    				// stockage des données dans des variable de session
    				//$_SESSION['login']=$loginindex;
    				//$url.="portail/traitements/traitement_login.php";
    				//header("Location: " .$url);
     
    				$Result = $loginindex;
     
    				exit;
    			}
    			else
    			{
    			throw new Error("Erreur");
    			}
    		}
    	}
    }
    return ($Result);
    }
     
    }
     
    ?>
    Je retourne $Result et dans mon code mxml (action script) j'affiche juste le résultat.

    Merci pour votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 319
    Par défaut
    Citation Envoyé par gasper06 Voir le message
    J'ai essayé un code PHP en passant par AMF mais il me bloque tout le service AMF(fonctionnel jusqu'à là).
    Je retourne $Result et dans mon code mxml (action script) j'affiche juste le résultat.

    Merci pour votre aide
    Peux tu être plus précis ? qui est donc ce "il" qui te "bloque tout le service AMF" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut
    le code PHP.


    Sinon y a pas de moyen en action script ou en flex de récupérer le login utilisateur de la session windows(NT)?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Par défaut
    Bon;

    Pas le temps de chercher le problème d'AMFPHP alors je suis passé par HTTPService.
    Alors le mxml fais appelle au meme fichier php (en haut) et récupère le login utilisateur de la session windows en cours (via le serveur).
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="recup_login_NT()">
     
    <mx:Script>
     
    		<![CDATA[
    		import mx.controls.Alert;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.http.HTTPService;
    // Procédure déclenchée à la fin de la création de l’application
    public function recup_login_NT():void{
    			var serviceHttp:HTTPService = new HTTPService;
    // Spécification de l’URL du fichier php
    serviceHttp.url = "LIEN_FICHIER_PHP.php"
     
    // Type de méthode d’envoi des données
    serviceHttp.method = "POST";
    // Procédure à exécuter en cas de succès
    serviceHttp.addEventListener(ResultEvent.RESULT,resultatOk)
    // Procédure a exécuter en cas d’erreur
    serviceHttp.addEventListener(FaultEvent.FAULT,resultatKo)
    // Exécution du service
    serviceHttp.send()
    }
    // Procédure exécutée en cas de réception du résultat
    public function resultatOk(e:ResultEvent):void
    {
    // Affichage du résultat dans un label
    id_label.text = "LOGIN :"+e.result+".";
    }
    // Procédure exécutée en cas d’erreur
    public function resultatKo(e:FaultEvent):void
    {
    // Message d’erreur
    Alert.show("Erreur !");
    }
    		]]>
    	</mx:Script>
    <mx:Label id="id_label" text="Login"/>
    </mx:Application>
    Le fichier Php est sur le premier poste. Il fauderait juste changer a la fin par un Merci.

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

Discussions similaires

  1. [FLEX] Nouvelle technologie Flex de Macromédia ou OpenLaszlo
    Par Community Management dans le forum Autres langages pour le Web
    Réponses: 33
    Dernier message: 01/10/2008, 15h35
  2. Flex et Bison avec Visual
    Par kiroukou dans le forum MFC
    Réponses: 16
    Dernier message: 16/05/2006, 14h47
  3. Réponses: 2
    Dernier message: 18/06/2005, 18h14
  4. [Flex & Bison] Problème avec yyFlexLexer
    Par kiroukou dans le forum Autres éditeurs
    Réponses: 15
    Dernier message: 26/05/2005, 13h05

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