Portál AbcLinuxu, 6. května 2025 20:28

Dotaz: NTLM Autentifikace v PHP

7.7.2010 10:01 TomF
NTLM Autentifikace v PHP
Přečteno: 1884×
Odpovědět | Admin
Ahoj. Co je cílem: v PHP aplikaci pouze zjistit logon name přihlášeného uživatele, nic víc. (Žádné přihlašování, žádné ověřování v doméně.) Použitá architektura: doména Win2003 server, PC s WinXP + Linux server Apache 2.0, apache-mod_ntlm, PHP 5.2.6 (není součástí domény). Konfigurace modulu NTLM:
        NTLMAuth on
        NTLMBasicAuth on
        NTLMBasicRealm TEST
        NTLMAuthoritative on
        NTLMDomain TEST
        NTLMServer DOMCTRL001
        NTLMBackup DOMCTRL001
        NTLMLockfile /tmp/_my.lck

        AuthName NTAuth
        AuthType NTLM
        require valid-user
        Satisfy all
Dosavadní výsledek: V access_log Apache už nějaký náznak autentizace je, ale nejsem schopen z něho pochopit v čem je problém. Při přístupu k jedné aplikaci se v logu dokonce už objeví požadované přihlašovací jméno,
192.168.6.31 - guest [07/Jul/2010:09:06:23 +0200] "GET /styles.css HTTP/1.1" 404 1159 "http://192.168.6.197/test.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
ale proměnná $_SERVER['PHP_AUTH_USER'] stejně zůstává stále prázdná. Při přístupu ke skriptu který obsahuje phpinfo(), je v logu něco docela jiného:

192.168.6.31 - - [07/Jul/2010:09:08:22 +0200] "GET /phpinfo.php HTTP/1.1" 401 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
192.168.6.31 - - [07/Jul/2010:09:08:22 +0200] "GET /phpinfo.php HTTP/1.1" 401 - "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
192.168.6.31 - - [07/Jul/2010:09:08:22 +0200] "GET /phpinfo.php HTTP/1.1" 200 45167 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
192.168.6.31 - - [07/Jul/2010:09:08:22 +0200] "GET /phpinfo.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 401 - "http://10.52.6.197/phpinfo.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
192.168.6.31 - - [07/Jul/2010:09:08:22 +0200] "GET /phpinfo.php?=SUHO8567F54-D428-14d2-A769-00DA302A5F18 HTTP/1.1" 401 - "http://192.168.6.197/phpinfo.php" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"


Sice netuším, co to znamená, ale usuzuji z toho, že asi dost záleží na použité HTML hlavičce. Uměl by mi někdo poradit, jak postupovat dál? V čem je problém? Jak má vypadat HTML hlavička? Mám správnou konfiguraci NTLM modulu? Díky za kažkou radu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.7.2010 10:25 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: NTLM Autentifikace v PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus kouknout na toto.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
7.7.2010 12:25 VSi | skóre: 28
Rozbalit Rozbalit vše Re: NTLM Autentifikace v PHP
No, nevím jak by tohle mohlo fungovat, když u Apache NTLM modulu se musí nastavovat IP adresa domain controlleru, se kterým ten Apache modul komunikuje. Možná ale ten skript vezme u všech uživatelů jakékoliv heslo, to by mohlo fungovat.

Ten "klasický" mod_ntlm se po rozchodit nepodařilo. Ale už nekolik let mi finguje Apache + mod_perl + Apache2::AuthenNTLM, config:
<Files ~ "ntlm/*">
  PerlAddVar ntdomain "domena 192.168.1.5"
  PerlSetVar defaultdomain domena
  PerlSetVar fallbackdomain domena
  PerlSetVar splitdomainprefix 1
  PerlSetVar ntlmauthoritative on
  PerlSetVar ntlmdebug 0
  PerlSetVar ntlmsemkey 41759
  PerlAuthenHandler Apache2::AuthenNTLM
  AuthType ntlm
  AuthName "Firma - Single Sing On"
  require valid-user
</Files>
Nicméně má to tu vlastnost, že když prohlížeč nemá pro daný web povolené NTLM, tak se zobrazí klasické okno HTTP Basic autentizace. To je jak jsem pochopil daé chování prohlížečů a nejde to ovlivnit. Pozor na to, že jak v IE tak ve Firefoxu to funguje, ale je třeba adresu server nastavit jako "důvěryhodnou". Ve FF je to v about:config network.automatic-ntlm-auth.trusted-uris, v IE je potřeba název serveru přidat do "Intranet" zóny.

V PHP je pak login uživatele v $_SERVER['REMOTE_USER'].
7.7.2010 12:26 TomF
Rozbalit Rozbalit vše Re: NTLM Autentifikace v PHP

Super!

Zkopíroval jsem, uložil jsem, spustil jsem ... a funguje to ;-).

Mockrát děkuju.

7.7.2010 13:47 jos
Rozbalit Rozbalit vše Re: NTLM Autentifikace v PHP
a v $_SERVER['REMOTE_USER'] ta informace není? to používáme my.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.