Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 15h28   #1
Membre régulier
 
Étudiant
Inscription : octobre 2010
Messages : 92
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 92
Points : 78
Points : 78
Par défaut PHP SSO Windows

Bonjour,

J'ai un serveur Apache 2.2.17 avec PHP Version 5.3.5 (WAMP 2.1).
J'aimerai réaliser un site intranet pour l'entreprise.
Les utilisateurs de ce site seront essentiellement sous Windows XP SP3 voir Windows 7.
J'aimerai leur éviter d'avoir à retapper leur login/password et utiliser leur compte Windows (Active Directory) afin de leur accorder l'accès aux sites et éventuellement de graduer ces accès (privilèges).

Concernant le browser, certains utilisent IE 8.* ou IE 9.* et d'autre Firefox 4.* ou Firefox 5.*, voir Chrome.
Bien entendu le SSO devra être fonctionnel pour toutes ces versions.

J'ai trouvé une piste pour IE 8.* et IE 9.* mais non fonctionnel avec Firefox *.* ni Chrome (normal c'est du VBs) :
Code :
1
2
3
4
5
6
7
<script language="VBscript">
	Dim X
	set X = createobject("WSCRIPT.Network")
	dim U
	U=x.UserName
	MsgBox "username: " & U
</script>
J'ai vu parler de mod_auth_sspi, mais je n'ai pas trouvé de vraies docs.

Existe-il un autre moyen de faire du SSO facilement avec PHP/Windows ?
zeclad01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 15h34   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
via un module apache (en kerberos par exemple) l’identifiant est envoyer dans les entêtes
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2011, 16h45   #3
Membre régulier
 
Étudiant
Inscription : octobre 2010
Messages : 92
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 92
Points : 78
Points : 78
Citation:
Envoyé par stealth35 Voir le message
via un module apache (en kerberos par exemple) l’identifiant est envoyer dans les entêtes
"In order to use the Negotiate method you need a browser supporting it (currently standard IE6.0 or Mozilla with the negotiateauth extension)."

Faut installer une extension sur tous les Firefox ?
zeclad01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 11h22   #4
Membre régulier
 
Étudiant
Inscription : octobre 2010
Messages : 92
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2010
Messages : 92
Points : 78
Points : 78
J'ai mis de côté les modules, plugins et compagnie parceque je ne comprenais rien.
J'ai préféré ne pas utiliser de VBs, de Jscript, de JavaScript ni d'ActiveX.

Et j'utilise NTLM qui fonctionne aussi bien sous IE que sous FF (il faut activer le NTLM comme précisé ici : http://sivel.net/2007/05/firefox-ntlm-sso/ : about:config > network.automatic-ntlm-auth.trusted-uris > modifier "adresse,adresse,adresse,adresse")

http://siphon9.net/loune/2007/10/sim...t-ntlm-in-php/

Je n'ai rien installer de particulier, et je suis entrain d'essayer de comprendre pourquoi et comment ça marche.

Au cas où le devienderait off, voici le code à utiliser :

Code :
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
<?php
$headers = apache_request_headers();
 
if (!isset($headers['Authorization']))
{
	header('HTTP/1.1 401 Unauthorized');
	header('WWW-Authenticate: NTLM');
	exit;
}
 
$auth = $headers['Authorization'];
 
if (substr($auth,0,5) == 'NTLM ')
{
	$msg = base64_decode(substr($auth, 5));
	if (substr($msg, 0, 8) != "NTLMSSP\x00")
		die('error header not recognised');
	if ($msg[8] == "\x01") {
		$msg2 = "NTLMSSP\x00\x02\x00\x00\x00".
		"\x00\x00\x00\x00". // target name len/alloc            
		"\x00\x00\x00\x00". // target name offset             
		"\x01\x02\x81\x00". // flags             
		"\x00\x00\x00\x00\x00\x00\x00\x00". // challenge             
		"\x00\x00\x00\x00\x00\x00\x00\x00". // context             
		"\x00\x00\x00\x00\x00\x00\x00\x00"; // target info len/alloc/offset           
		header('HTTP/1.1 401 Unauthorized');         
		header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2)));
		exit;
	}
	else if ($msg[8] == "\x03")
	{
		function get_msg_str($msg, $start, $unicode = true)
		{
			$len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
			$off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
			if ($unicode)
				return str_replace("\0", '', substr($msg, $off, $len));
			else
				return substr($msg, $off, $len);
		}
		$user = get_msg_str($msg, 36);
		$domain = get_msg_str($msg, 28);
		$workstation = get_msg_str($msg, 44);
		print "You are $user from $domain/$workstation";
	}
}
?>
EDIT : Moi ça fonctionne pour de l'intranet.
zeclad01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h31.


 
 
 
 
Partenaires

Hébergement Web