Kako da napravim autentifikaciju za HTTP server (indy) koristeći korisnikovu prijavu u Windows? Dovoljno mi je username da dobijem.
TIdHTTPServer i windows auth
Zaključano
Zakačeno
Da se klijent autentifikuje na tvoj indy server preko windows username/pass? Najlakse je verovatno da pozoves LogonUser.
Ako hoces sigurnije resenje onda treba da pogledas SSPI i Kerberos, ali mislim da nema Delphi implementacije, eventualno ona u mORMotu.
Ako hoces sigurnije resenje onda treba da pogledas SSPI i Kerberos, ali mislim da nema Delphi implementacije, eventualno ona u mORMotu.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Kako mislis "pozoves LogonUser"?
U mrezi imamo 2 servera sa ASP.NET aplikacijama u koje ne moram da se logujem, sam nekako prepozna koji mi je windows user. Kad im pristupam spolja, trazi mi user/pass. To bih i ja hteo na mom http serveru.
Dovoljno mi je samo windows username da dobijem pa cu na osnovu toga da radim dalje sta sam mislio. Gledao sam header requestova koje pravi jedna od tih asp aplikacija, ne vidim nista specificno sto bi pomoglo serveru da zna ko sam (ako browser slucajno zna i moze da salje nesto vise od reginal settingsa, rezolucije i tih sitnica, onda smo svi u problemu
)
Jedino sto mi pada na pamet je da domain zna koji user je na kojem ip-u prijavljen pa na osnovu peer ip odredi koji sam user...
U mrezi imamo 2 servera sa ASP.NET aplikacijama u koje ne moram da se logujem, sam nekako prepozna koji mi je windows user. Kad im pristupam spolja, trazi mi user/pass. To bih i ja hteo na mom http serveru.
Dovoljno mi je samo windows username da dobijem pa cu na osnovu toga da radim dalje sta sam mislio. Gledao sam header requestova koje pravi jedna od tih asp aplikacija, ne vidim nista specificno sto bi pomoglo serveru da zna ko sam (ako browser slucajno zna i moze da salje nesto vise od reginal settingsa, rezolucije i tih sitnica, onda smo svi u problemu
Jedino sto mi pada na pamet je da domain zna koji user je na kojem ip-u prijavljen pa na osnovu peer ip odredi koji sam user...
Trenutno nemam vremena da pisem... nada se da ce pomoci ovo dole na linkovima a tu je i google za ostalo:
developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
c-sharpcorner.com/UploadFile/84c85b/understanding-windows-authentication-in-detail/
baeldung.com/httpclient-4-basic-authentication
developer.mozilla.org/en-US/docs/Web/HTTP/Authentication
c-sharpcorner.com/UploadFile/84c85b/understanding-windows-authentication-in-detail/
baeldung.com/httpclient-4-basic-authentication
Jasno je meni koji su sve načini autentifikacije, sada me interesuje samo ovaj sa windows domain nalogom. Na drugom linku što si poslao piše nešto o tome ali takođe piše i da je ograničeno samo na IIS i windows platforme. Ako je to čist TCP, kako može biti ograničeno na windows??? Šta je to što browser kroz TCP pošalje serveru da on zna ko je klijent (osim ip adrese)? Ako server samo na osnovu IP-a sazna koji windows user je logovan na tom računaru, kako ja to sa delphi-em da saznam? Pošto to u mreži radi za asp.net, siguran sam da u mreži postoji sve što treba (active directory itd). Nisam stručnjak za asp i trenutno nemam pristup serveru (mogao bih da dobijem ali moram znati šta mi treba).
Pitanje je kako ti klijenti pristupaju serveru, da li preko tvoje klijent aplikacije ili preko običnog browsera. Ako je preko tvoje korisničke app, onda je lako, ako je u pitanju brower onda bolje postavi pitanje na nekom php forumu.
Preko obicnog browsera pristupaju. Pitanje je za delphi jer je http server u delphiu i on prima request. Ako treba da se kacim na ldap ili slicno, i to bi trebao u delphiu. U ovom slucaju nije mi opcija da radim php ili asp jer je dosta logike vec u delphiu. Mozda samo auth da mi radi asp ali ne bih da pravim "Frankestajna" ako ne moram...
Mislim da pitaš php programere koji podatak šalje brower, pa onda da tražiš rešenje za Delphi. teško da neko zna od Delphi programera direktno. Ovako bi imao neki trag.
Ja i dalje ne kapiram da li ti pravis klijent ili server?
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Evo jednog dela JS iz HTML-a
...
var wshell = new ActiveXObject("WScript.Shell");
var username = wshell.ExpandEnvironmentStrings("%USERNAME%");
...
Ovaj skript daje Windows username SAMO AKO SE STRANICA OTVORI IZ IE!!!
Ni jedan drugi browser ne dozvoljava da JS izađe iz sendbox-a i da čita varijable okruženja na klijentskoj mašini.
Dakle, ako se http servisu pristupa iz IE, može da se pročita windows logon, drugačije ne može!
Skript radi bez obzira na to šta se koristi na serverskoj strani (IIS, Apache, nginx...) ali je bitno da klijent bude IE na windowsu.
...
var wshell = new ActiveXObject("WScript.Shell");
var username = wshell.ExpandEnvironmentStrings("%USERNAME%");
...
Ovaj skript daje Windows username SAMO AKO SE STRANICA OTVORI IZ IE!!!
Ni jedan drugi browser ne dozvoljava da JS izađe iz sendbox-a i da čita varijable okruženja na klijentskoj mašini.
Dakle, ako se http servisu pristupa iz IE, može da se pročita windows logon, drugačije ne može!
Skript radi bez obzira na to šta se koristi na serverskoj strani (IIS, Apache, nginx...) ali je bitno da klijent bude IE na windowsu.
@savkic
Radim server, pise TIdHTTPServer :)
@djoka
Siguran sam da je na server strani komplet resenje a ne na klijentu (js). Radi iz svih browsera, ne samo iz IE. Bokinet je dao link gde se vidi kako to radi u asp.net, ali meni treba na indy http serveru.
Radim server, pise TIdHTTPServer :)
@djoka
Siguran sam da je na server strani komplet resenje a ne na klijentu (js). Radi iz svih browsera, ne samo iz IE. Bokinet je dao link gde se vidi kako to radi u asp.net, ali meni treba na indy http serveru.
Proveri ti i na Microsoft sajtu.
To rešenje iz gornjeg linka radi samo kada je http server IIS, a klijent IE.
Rešenje koje sam ja postavio je sa okruženja koje ja održavam i gde je Apache sa serverske strane. Dotično rešenje radi sa IE na klijentskoj strani i SAMO sa IE.
To rešenje iz gornjeg linka radi samo kada je http server IIS, a klijent IE.
Rešenje koje sam ja postavio je sa okruženja koje ja održavam i gde je Apache sa serverske strane. Dotično rešenje radi sa IE na klijentskoj strani i SAMO sa IE.
Prvo sto treba da proveris je to sto pise dojka da li radi to resenje sa drugim browserima.
Ja sam nesto malo koristio indy server.
Kad mi je trebalo da proverim kako radi server (indy ili inace) sa browserima onda sam koristion tcp klijet koji se konektuje kao brwser.
Taj klijent mi je onda pravio log sa svom komunikacijom i znao sam sta se salje a sta se prima.
Inace za tcp klijenta treba vremena a ako imas onda se konektuje na port 80 i salje i prima podatke isto kaosvaka druga tcp konekcija.
Jedina razlika je sto mora da posalje http podatek sa http zaglavljem.
Ja sam nesto malo koristio indy server.
Kad mi je trebalo da proverim kako radi server (indy ili inace) sa browserima onda sam koristion tcp klijet koji se konektuje kao brwser.
Taj klijent mi je onda pravio log sa svom komunikacijom i znao sam sta se salje a sta se prima.
Inace za tcp klijenta treba vremena a ako imas onda se konektuje na port 80 i salje i prima podatke isto kaosvaka druga tcp konekcija.
Jedina razlika je sto mora da posalje http podatek sa http zaglavljem.
Resenje sa asp.net radi sa svim browserima, ne samo sa IE. Siguran sam da je resenje na strani servera a ne neka javascripta ili nesto sa klijenta. Gledao sam sa "Developer Tools" od chrome-a sta salje u headeru requesta ali nisam nasao nista neobicno sto bi moglo da identifikuje klijenta. Mogao bih i Wireshark da pustim i gledam ceo saobracaj ali mi se cini da je to pogresan put...
Gledam trenutno kako sa Delphi sa da nakacim na Active Directory, ima cak i preko ADO-a ali mi nesto zeza trenutno... Mozda bih mogao da vidim koji user je na kojem IP-u trenutno, pa iz requesta izvucem IP i vidim koji je user.
Gledam trenutno kako sa Delphi sa da nakacim na Active Directory, ima cak i preko ADO-a ali mi nesto zeza trenutno... Mozda bih mogao da vidim koji user je na kojem IP-u trenutno, pa iz requesta izvucem IP i vidim koji je user.
Što ne napraviš da ti se korisnik registruje na serveru. Nisam baš siguran da ova auto detekcija radi, sem preko ip adrese.
Kolikom se secam, Indy server salje fajlove iz web dira.
Jednostavno bi stavio taj asp.net fajl u web folder.
Na istom racunaru se moze konektovati na server sa:
localhost:80/asp.net
ili:
127.0.0.1/asp.net
Ili tako nesto, odnosno da posalje tako kako se vidi u toj komunikaciji.
Onda mozeda se vidista se dogadja u browseru.
Moze da se uporedi sa tom komunikacijom gde radi i vidi da li je nesto drugacije.
Jednostavno bi stavio taj asp.net fajl u web folder.
Na istom racunaru se moze konektovati na server sa:
localhost:80/asp.net
ili:
127.0.0.1/asp.net
Ili tako nesto, odnosno da posalje tako kako se vidi u toj komunikaciji.
Onda mozeda se vidista se dogadja u browseru.
Moze da se uporedi sa tom komunikacijom gde radi i vidi da li je nesto drugacije.
@milan
Trenutno mi se useri loguju sa username/passw, dobiju token koji ide uz svaki request. Posto vidim da moze i automatski preko windowsa, hteo sam da probam posto vidim da radi a ne znam kako :) aplikacija se vidi samo u lokalnoj mrezi, nije na internetu, pa bih mogao da se oslonim iskljucivo na windows auth kad bih znao kako.
@tkaranovic
Druze ili ja tebe potpuno ne razumem ili si potpuno omasio :) mozes malo objasniti?
Trenutno mi se useri loguju sa username/passw, dobiju token koji ide uz svaki request. Posto vidim da moze i automatski preko windowsa, hteo sam da probam posto vidim da radi a ne znam kako :) aplikacija se vidi samo u lokalnoj mrezi, nije na internetu, pa bih mogao da se oslonim iskljucivo na windows auth kad bih znao kako.
@tkaranovic
Druze ili ja tebe potpuno ne razumem ili si potpuno omasio :) mozes malo objasniti?
Rekao si da imas komunikaciju. Prepostavljam sa serverom koji radi to sto ti treba.
Tu kominiksciju mozes da snimis u fajlove.
recimo:
NBroswer je poslao: httpr1.txt
Server je odgovrio: httpo1.txt
Stavis jednostvnu TCP komponentu na formu sa activnim portom 80.
Startujes web serve tester na svom racunaru.
Startujes NBroswer na svom racunaru.
Ukucas u NBroswer:
localhot:80
NBroswer e poveze sa tvojim testerom.
NBroswer je posalje tvom web testeru: httpr1.txt
Tvoj web tester poslaje httpo1.txt
Onda vidis da li NBroswer reaguje na isti nacin kao se povezivao sa serverom sa kojim si snimio uspesnu komunikaciju.
Ako je bilo vise slanja httpr2.txt, httpr2.txt... onda se samo poslje sledeci snimljeni fajl.
U sustini NBroswer nema pojma da li je povezan sa googlom (na primer) ili sa tvojim testerom.
Ja sam tako bio napravio "proxy" web server tester sa kojim se povezivao browser a "proxy" tester se povezivao sa pravim serverom i prosledjivao zahteve i odgovore i sve snimao fajlove.
Onda sam pregledao sta i kada salje i prima i to posle koristio.
Sad kad pogledam celu poruku vidim da je komplikovano to sto sam radio i sto sam sad nakucao :)
Tu kominiksciju mozes da snimis u fajlove.
recimo:
NBroswer je poslao: httpr1.txt
Server je odgovrio: httpo1.txt
Stavis jednostvnu TCP komponentu na formu sa activnim portom 80.
Startujes web serve tester na svom racunaru.
Startujes NBroswer na svom racunaru.
Ukucas u NBroswer:
localhot:80
NBroswer e poveze sa tvojim testerom.
NBroswer je posalje tvom web testeru: httpr1.txt
Tvoj web tester poslaje httpo1.txt
Onda vidis da li NBroswer reaguje na isti nacin kao se povezivao sa serverom sa kojim si snimio uspesnu komunikaciju.
Ako je bilo vise slanja httpr2.txt, httpr2.txt... onda se samo poslje sledeci snimljeni fajl.
U sustini NBroswer nema pojma da li je povezan sa googlom (na primer) ili sa tvojim testerom.
Ja sam tako bio napravio "proxy" web server tester sa kojim se povezivao browser a "proxy" tester se povezivao sa pravim serverom i prosledjivao zahteve i odgovore i sve snimao fajlove.
Onda sam pregledao sta i kada salje i prima i to posle koristio.
Sad kad pogledam celu poruku vidim da je komplikovano to sto sam radio i sto sam sad nakucao :)
Imam komunikaciju sa nekom web aplikacijom u asp.net koja radi to sto želim i bilo kojim browserom.
Nešto kao proxy pass? Morao bih sve linkove i ajax pozive da preusmeravam na svoj "proxy", tj. da menjam html koji šaljem klijentu (browseru) jer ću ja od pravog servera dobiti https://intranet/bla?bla=bla a klijentu treba da saljem http://localhost/bla?bla=bla da bi sve islo preko tog "proxy"-a.
Bojim se da bih opet došao do zaključka da je sve "server-side" rešeno, da džaba analiziram request/response.
Nešto kao proxy pass? Morao bih sve linkove i ajax pozive da preusmeravam na svoj "proxy", tj. da menjam html koji šaljem klijentu (browseru) jer ću ja od pravog servera dobiti https://intranet/bla?bla=bla a klijentu treba da saljem http://localhost/bla?bla=bla da bi sve islo preko tog "proxy"-a.
Bojim se da bih opet došao do zaključka da je sve "server-side" rešeno, da džaba analiziram request/response.
Da sa web aplikacijom je sve komplikovanije...
Ako nije problem/(poslovna)tajna tvoja aplikacija radi kao ko indy server a na istoj masini je povezana sa tom web aplikacijom?
Ako nije problem/(poslovna)tajna tvoja aplikacija radi kao ko indy server a na istoj masini je povezana sa tom web aplikacijom?