Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Kerberos 5 (KADM5) pod Windows PHP5
Forum PHP.pl > Forum > Przedszkole
iwosz
Witam,

w necie jest 1000 skopiowanych tutoriali z php.net jak połączyć się z serwerem Kerberos itd. Ja chciał bym zapytać jak załadować tą bibliotekę do lokalnego PHP5 na Windows7? Na początek napiszę czego próbowałem:

1. PEAR::Auth()

Wszystko spoko, niestety wywalił się na : "Cannot use Kerberos V authentication, KADM5 extension not loaded!". (Załadowałem Auth.php oraz KADM5.php )

2. Rozszerzenie PECL kadm5


Sciągnąłem kadm5-0.2.3.tgz jednak nie wiem co z nim dalej robić... przeczytałem http://pl.php.net/manual/pl/install.pecl.pear.php gdzie piszą:
  1. $ pecl install extname
  2.  
  3. This will download the source for extname, compile, and install


Niestety dostaję to:
  1. WARNING: channel "pear.php.net" has updated its protocols, use "channel-update p
  2. ear.php.net" to update
  3. downloading kadm5-0.2.3.tgz ...
  4. Starting to download kadm5-0.2.3.tgz (23,090 bytes)
  5. ........done: 23,090 bytes
  6. 13 source files, building
  7. ERROR: The DSP kadm5.dsp does not exist.


pliku kadm5.dsp nigdzie nie ma, szukałem ale nie znalazłem.

Idąc dalej rozpakowałem ten kadm5-0.2.3.tgz jednak już żaden "ekspert" w licznych tutorialach nie wyjaśnił jak to ręcznie skompilować. A podpowiedzi żeby odkomentować bibliotekę w php.ini już mnie w ogóle dobijają... ;]

Czy istnieje w ogóle biblioteka DLL dla tego rozszerzenia!?

Proszę o poważne odpowiedzi, próbowałem wszystkiego co znalazłem w sieci, nie pisze tutaj o wszystkich moich kombinacjach ale proszę darować sobie sarkastyczne pytania tongue.gif

Liczę na pomoc, bo ja tez Wam pomagałem jeśli mogłem,

iwosz.


Nikt nie umie pomóc? ohno-smiley.gif

Ok, uproszczę problem... mam serwer IIS oraz Kerberos. W IIS skonfigurowana autentykacja windows. Mam tez aplikacje w PHP, logując się do aplikacji wykonywana jest autentykacja windows po Kerberosie i aplikacja wpuszcza lub nie usera. Tak to powinno przynajmniej wyglądać smile.gif Teraz mam pytanie:

Jak PHP ma się "dowiedzieć" że autentykacja przebiegła pomyślnie?
Niktoś
kadm5-0.2.3.tgz to rozszerzenie typowo linuxowe.Nie ma jakichś binarek-lub zip?
iwosz
Cytat(Niktoś @ 7.11.2011, 12:02:50 ) *
kadm5-0.2.3.tgz to rozszerzenie typowo linuxowe.Nie ma jakichś binarek-lub zip?


Nie ma nic, dlatego próbuje coś rzeźbić, .tgz to jest też archiwum, i pecl powinien sobie z tym poradzić i skompilować to rozszerzenie. Przynajmniej z innymi rozszerzeniami tak działało. Swoją drogą PEARowy moduł Auth() też korzysta z tej biblioteki, a nie ma jej dołączonej więc też trzeba ją sobie "wyczarować" ;]

Ale tak jak napisałem kadm5 słyżu do administracji Kerberosem (dodawania udziałów ról itd) więc nie koniecznie jest on potrzebny do autentykacji. Przede wszystkim to serwer WWW (IIS) komunikuje się z Kerberosem i dokonuje autentykacji. Ja później tylko potrzebuję z PHP odpytać IIS/
Kerberos w przypadku gdy np. user łączy się z kompa z poza AD. Bo wtedy powinienem go ręcznie zalogować, czyli w PHP form z loginem i hasłem i to jakoś przesłać do IIS/Kerberos... tylko jak? ;]


Dzięki za zainteresowanie!

Pozdrawiam.
Niktoś
Jak nie ma nic:
https://www.secure-endpoints.com/heimdal/
Zainteresuj się może tym binarka z implementacją Kerbos-na stonie http://www.h5l.org/ pełna dokumentacja co i jak zrobić.
iwosz
Cytat(Niktoś @ 7.11.2011, 12:32:50 ) *
Jak nie ma nic:
https://www.secure-endpoints.com/heimdal/
Zainteresuj się może tym binarka z implementacją Kerbos-na stonie http://www.h5l.org/ pełna dokumentacja co i jak zrobić.


No ale to jest wersja serwera Kerberos, ja mam działający serwer Kerberos pod windowsem tongue.gif

Czyli podsumujmy: mamy serwer IIS, mamy serwer Kerberos i mamy aplikacje PHP. Jak poprzez aplikacje PHP możemy się zautentykować "ręcznie" na serwerze?
Niktoś
Tak tylko jak widzę to Ściągałeś pliki linuxowe, a tam masz czysto windowsowe pliki z pluginami nawet pod apache.Może jednak wartałoby się jednak tym zainteresować.Poczytaj może znajdziesz tam coś ciekawego dla siebie:)

A jaką masz bazę danych?Pytam bo można skonfiguraować,web.config aby zapisywało role automatycznie do bazy ,ale baza musi być MSSQL.

Jeśli chodzi o odczyt tych rół to odpowiednia configuracja web.config powinna rozwiązać problem-to plik(xml) konfiguracyjny iis'a-i zniego dokonywać potrzebnych odczytów.
iwosz
Baza MySQL, plik xml IIS'a? Nie rozumiem, w pliku konfiguracyjnym IIS'a zapisywane są role Kerberos i autoryzowani userzy(loginy)? Chodzi mi o to że po automatycznej autentykacji w aplikacji muszę wiedzieć jaki user się zalogował, a przecież form logowania nie wyskoczył (bo user się zalogował auto) więc muszę odczytać kto się właśnie zalogował przez Kerberosa do AD, jak to zrobić? smile.gif

A wracając do Twojej sugestii że to są pliki dla Linuxa, to powiedz mi jak mam zainstalować paczkę Auth z wykorzystaniem Kerberosa:
http://pear.php.net/manual/en/package.auth...orage.kadm5.php

Cytat
This storage driver makes use of the PECL kadm5 extension to provide authentication services against a Kerberos V.


PECL kadm5 extension? Spoko! -> http://pecl.php.net/package/kadm5 -> kadm5-0.2.3.tgz ups! (Ja tu nie widzę pliku .dll) Dlatego utknąłem i pisze na forum tongue.gif

Dodatkowo w opisie paczki kadm5 jest:
Cytat
This package allows you to access Kerberos V administration servers.
You can create, modify, and delete Kerberos V principals and policies.

To ja nie wiem jak to się ma do tego:
Cytat
Auth_Container_KADM5 - Authenticate against a Kerberos 5 server

Bo ja nie chcę tworzyć nowych ról, tylko sie zalogować na istniejące (w Auth nawet się hasła nie podaje!) ;]

Pozdr!
Niktoś
Tutaj jest przykładowy plik web.config dla PHP
http://learn.iis.net/page.aspx/557/transla...-iis-webconfig/

Dalsze twoje działania będą wymagały podstawowej wiedzy o IIS i strukturze pliku web.config.
Ułatwieniem odczytu takiego pliku z poziomu php jest "plugin-wtyczka" zend-config.

W pliku web config-można przeprowadzić cały system autoryzacji i uwierzytelnienia, ustawić connection string do bazy danych, zrobić urlrewiting , ustawić czas życia sesji, ustawić flagi na coockies itp. i wiele wiele innych rzeczy.

Tutaj masz wszystko o Kerbosie i konfiguracji na IIS:
http://www.adopenstatic.com/cs/blogs/ken/a.../10/19/512.aspx
iwosz
Aha, czyli ten web.config to jest taki .htaccess ? smile.gif Tylko nadal nie wiem jak mogę odczytać dane tego zalogowanego usera który połączył się z serwerem WWW. (PS: web.config jest tylko w IIS 7, w IIS 6 brak takich bajerów wink.gif )

Dobra już wszystko rozkminiłem i działa! biggrin.gif

exclamation.gif UWAGA! Poniższe rozwiązanie działa przede wszystkim dla IE, przetestowałem też pod FF, pod pozostałymi przeglądarkami to może nie działać!

Moje środowisko
Serwer AD: Win 2003 Server
Server WWW: Win 2003 Server, IIS 6, PHP 5.3
Klient: IE 7/8, FF 3/5

Więc tak:

1. Konfiguracja serwera
- należy postawić AD na odrębnym serwerze(maszynie)
- należy postawić IIS na drugim serwerze (wbudowany Kerberos)
^- IIS powinien mieć ustawione: Directory Security -> Authentication and access control -> Authenticated Access -> Windows Integrated Authentication
^- dodatkowo powinna być wymuszana autoryzacja NTLM
- na serwerze WWW(IIS) zainstalować PHP z LDAPem (openLDAP)

2. Struktura sieci, przepływ danych
Schemat komunikacji:
Kod
[Serwer AD] -(Kerberos)-> [Serwer IIS] <-> Klient
   ^-----(bezpośrednia komunikacja z AD)-----'

- Serwer AD powinien być na innej maszynie niż IIS (tak jest zalecane)
- Maszyna klienta będącego w domenie autoryzuje się bezpośrednio na serwerze AD
- IIS odpytywany przez klienta komunikuje się z serwerem AD po Kerberosie aby potwierdzić autoryzację
- IIS w przypadku braku autoryzacji wyświetla błąd 401, gdy wszystko jest ok wyświetla treść strony

3. Proces autoryzacji
Tłumaczę:
- Klient logując się do Windowsa autoryzuje się w AD (bezpośrednia komunikacja z AD).
- Klient otwierając przeglądarkę wysyła do IIS poświadczenia, IIS sprawdza czy ten user ma dostęp do AD(czy jest już zautoryzowany), w PHP mamy info:
Cytat
AUTH_TYPE: NTLM
AUTH_USER: SerwerName\login
LOGON_USER: SerwerName\login

- IIS przekierowuje na stronę aplikacji, jeśli usera nie ma w domenie to przekierowuję na stronę logowania do aplikacji
- podczas logowania mamy 2 opcje:
1) user jest poza AD ale ma tam konto, wtedy sprawdzamy czy podany login i haslo są poprawne poprzez LDAP:
  1. // autoryzacja poprzez openLDAP (php_ldap.dll)
  2. $AD_login = 'login';
  3. $AD_pass = 'password';
  4.  
  5. $ldapconn = ldap_connect('AD_serwer');
  6.  
  7. if( $ldapconn ) {
  8. // autoryzacja w domenie AD
  9. $authorized = ldap_bind($ldapconn, $AD_login, $AD_pass);
  10.  
  11. if( !$authorized ) {
  12. return false;
  13. } else {
  14. return true; // zautoryzowany w AD!
  15. }
  16. } else {
  17. echo "LDAP bind failed...";
  18. }

2) user nie ma konta w AD więc loguje się na login aplikacyjny (z bazy podłączonej w aplikacji)
- user uzyskuje dostęp do aplikacji.

I tak to działa u mnie, może komuś się przyda smile.gif aha, nie udało mi się skonfigurować tego pod Apache, ale dla Windowsa odpowiada za to moduł NTLM/mod_auth_sspi ale działa to TYLKO dla IE exclamation.gif . W httpd.conf dodajemy coś takiego:
Cytat
<IfModule mod_auth_sspi.c>
Alias /foo "C:/bar/foo"
<Location /foo-auth>
AuthName "Please Enter Your Logon Details"
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIOfferBasic On
SSPIBasicPreferred Off
require valid-user
</Location>
</IfModule>


oraz coś takiego jest jeszcze: http://modntlm.sourceforge.net/

Powodzenia!

PS. dzięki dla Niktoś za zainteresowanie! leci "pomógł" smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.