![]() |
Hej
Jag ska göra ett intranät (alla som surfar tillhör samma lokala nätverk) där webbservern ska kunna se vilken windowsanvändare som besökaren är inloggad som. Jag har googlat runt lite och sett en del lösningar som räcker halvvägs (t.ex. LDAP-funktionerna i php), men det ser inte ut att räcka hela vägen. Hur som helst. Webbservern får tag i datornamn och IP för den surfande datorn. Det betyder att jag behöver ett hjälpmedel för att få fram inloggad användare hos en angiven IP eller ett datornamn (IP to USERNAME). Jag försöker undvika att blanda in certifikat, javaapplets, active X och konstiga webbläsarinställningar. Med andra ord vill jag att allt är fullkomligt transparent. Man vill inte behöva preparera varje dator med några inställningar, utan webbservern ska kunna gräva fram infon själv. Antingen via någon central enhet (AD) eller genom att anropa den surfande datorn i bakgrunden. Jag förväntar mig att man mha IP kan få fram vilken user som är inloggad på den datorn. Om inte PHP kan ta fram det så kanske det genom en prompt går att få fram infon med några anrop, som jag kan göra genom exec(). Om inte det heller går så kan jag koda ihop något i C++ som kan gräva fram informationen (det måste ju bara gå!) och denna fil kan då returnera en text, som jag får fram när jag anropar den via exec(). Jag kan få inloggningar till nätverkets AD etc, så den infon går att komma åt, däremot kan man vad jag förstår inte köra IP->Username-sökning via detta. Nån som har testat att ta fram en bra lösning? Tack / Tobbe |
Om servern är en IIS är det väl bara att slå på "integrated windows authentication" så får du user name i en servervariabel (LOGON_USER eller liknande). Eller är det en icke-win-burk?
Att göra ett uppslag via AD är väl ingen höjdare. För även om det är möjligt så kan ju flera personer vara inloggade på samma maskin. Knappast speciellt säkert... |
Förlåt, glömde ange:
Apacheserver på Windowsmaskin. Fler ideer? |
Jag tror faktiskt inte du kan få fram användarnamn på den inloggade profilen utan att kompromissa med säkerheten på klienterna eller installera tredjepart programvara.
|
Spontant så känns det som om PHP egentligen inte borde "behövas" så att säga. På samma sätt som IIS:en kan köra integrated win-logon tycker jag att apache borde konfigureras att köra BasicAuth med t.ex. LDAP mot godtycklig LDAP server. Och ett AD kan väl fungera som LDAP server och då är du ju hemma.
|
Lite svårt med sådana här lösningar om du vill att allting skall vara transparent, du måste ha en inloggningsfunktion (likt. eg0master), sedan efter det är det inga problem att lägga allting i en Cookie som varar xxx antal år.
Problemet som kan uppstå med Cookie hanteringen är ju om flera personer delar dator och inte har egna användare som används. |
Det känns som att den här modulen gör det du behöver: http://httpd.apache.org/docs/2.0/mod/mod_a..._auth_ldap.html
Första träffen på Google "apache ldap" ;) Kör med vanlig HTTP Basic auth, med apache ska du kunna läsa PHP_AUTH_USER och PHP_AUTH_PW i _SERVER för att få fram användarnamnen. Användaren måste logga in igen, men använder samma användarnamn och lösenord som till domänen. Känns som en bra tradeoff? |
Tack för infon!
Men jag kommer inte nöja mig förrän inloggningen mot servern blir automatisk när man är inloggad mot domänen. Vi behöver inte oroa oss för problem med om folk inte är inloggade. Det ska också förtydligas att jag mha php kan ansluta mot AD mha lpad-funktionerna. Men jag vet inte hur jag ska få ut någon vettig information om det. Är det verkligen helt omöjligt att få fram vilken inloggad windowsanvändare som besöker sidan? Jag kan alltså göra en applikation i c++ eller c# som gräver fram infon över nätet (om det är lättare att göra så än att webbservern gör det), sen får webbservern anropa denna fil för att få datan serverad... Men... Det är inte förstahandslösningen... Stort tack till er som hjälper till att klura. :) |
Hm... Är inte det enklaste trots allt att gå över till IIS istället för Apache? Om du ändå har en windowsburk och det är ett intranät så innebär det knappast någon signifikant kostnad (om ens någon) att köra IIS på maskinen. Och dessutom tjänar kunden massor av pengar totalt sett eftersom du inte behöver lösa single-sign-on problematiken. För som sagt, jag tror det är mycket svårt. Och även om det är möjligt kan som sagt flera användare vara inloggade på samma maskin och då blir det ju ett säkerhetshål. Då kan du ju lika gärna ha en statisk-lista sopm mappar användarnas IP/hostnamn mot en viss användare...
Jag tror IIS är den klart smartaste lösningen för ditt problem. |
Ja, du kanske har rätt, men jag kommer låta det dröja ett par veckor innan jag ska testa detta, så jag är öppen för att hitta en Apachelösning.
Sen hoppas jag att IIS har riktigt bra alternativ till allt vad htaccess och virtual hosts heter, annars blir jag ledsen i ögat. Men jag förutsätter att allt värt att ha finns. Enligt kunden själv så kan inte flera användare vara inloggade på samma maskin enligt deras domäninställningar. En inloggning loggar ut ev. befintliga användare säger dom. Men ändå så kan det vara kul för framtiden att hitta en lösning som fungerar i Apache. Men jag tror/hoppas fortfarande att Windows på något sätt kan mappa IP->USER på något sätt. Kunden håller själv på att kolla upp detta hos sina MS-ninjor. |
Om du inte vill vara utan Apache så skulle du kunna hantera inloggningen med IIS och resten med Apache och skicka någon form av biljett med som verifieras mot en databas? En tanke iaf...
|
hmm... låter lite omständigt och suspekt, men jag förstår din tanke. Frågan är dock om det ens går att låta IIS lösa detta i bakgrunden samtidigt som man surfar mot Apacheservern. Ska fundera lite på det.
Men jag har tills vidare bestämt mig att det ska gå att göra med apache, utan inloggning på själva webbsidan. :) *klurar vidare* |
Skapa ett PHP script som sänder NTLM Auth header endast så kommer windows burken att automatisk skicka användarnamn + lösenord som den är inloggad med. Lösenordet är ju självklart en hash.
Självklart går det konfiguera sin burk att inte skicka ut det på det sättet men som standard gör det det. Den funktionen är rätt osäker då det är lätt att sno valfri företagslösenord genom att skicka dom en url till en sida som begär ntlm auth. För mer information så får du läsa dig till dokumenttion mer specefikt. Men är lätt att utnytja för att få tillgång till många login till företag, som tur är så klarar inte alla idioter att hantera något sådant. Eller inte många alls som kan windows mer ingående hur saker fungerar. |
Det du vill ha är SSO? Dvs. man måste ändå logga in? Eller vill du att man ska bli inloggad genom att du bara får tag på ett användarnamn?
Tyvärr kan du inte åstadkomma detta genom att man INTE göra några inställningar i IE eller Firefox (Dom enda som supportar SSO med NT LM). Du behöver få din sida med som en "Trusted Intranet site" under IEs säkerhetsinställningar, annars skulle ju typ vilken site som helst kunna ta reda på ditt inloggade username och DET VILL NOG INGEN !!! Som tur är kan du styra detta med en GPO (Group Policy) om ni har ett AD (Vilket det verkade som ni hade??) Efter det är gjort så kan du ta redan på vilken username användaren är inloggad som. Se här http://siphon9.net/loune/f/ntlm.php.txt Om du vill ha auth också, dvs. att php ska auth mot AD't så behöver du lite roligare saker med LDAP. Vi har gjort det med vårt intranät, att användarna blir automatiskt inloggade. Eftersom servern är med i AD't kan vi också ge rättigheter på intranätet beroende på vilka security groups dom är medlemmar i, samt skapa intranet lokala users automatiskt med info från AD't |
Aha, intressant, ska titta på era lösningar så fort jag har tid över.
Alltså, användarna är REDAN INLOGGADE från att de startade sin dator. Webbplatsen ska då få information om vem de är inloggad som. Resten sköter jag själv. |
Förstår att du sköter resten själv :-)
Det smarta med att man loggar in på intranätet (även om man redan är det!) är att du då kan få reda på användarens ALLA uppgifter från AD't - Det kanske du inte behöver men det är otroligt smidigt. Exemplevis om du vill ta reda på vem som är deras chef för exemplevis skicka en tidsrapport till chefens e-post så kan du ju lätt göra det genom en query i AD't. |
I see, men tror du man kan lösa detta utan att ha två inloggningar? Även om det finns styrkor med detta (som du själv säger) så blir det ändå ett onödigt steg eftersom vi inte har nytta av den infon som kan medföras.... (om den infon ens finns i AD:t)... Om det går att slippa webbsidans inloggning så ska vi göra det.
Tack :) |
Jag kanske missförstår, men det verkar inte vara så svårt...
Kod:
@exec("net session",$output); |
Du är fan gud, det där kan nog faktiskt funka. Det ser inte vattentätt ut, men det kan nog gå.
Samma user kan dyka upp på olika IPadresser, och säkerligen kan samma IP dyka upp med flera olika användare... Men det kanske går att sortera det där smart så att man får fram precis det man vill ha. Jag har inte fått chans att analysera vad en "session" innebär i det här fallet, men det ser rätt ljust ut just nu... Jag återkommer med testresultat. Tackar så hjärtligt! :) |
Så om jag tog min privata dator och kopplade upp mig till en share på er server, eller bara skrev ut ett dokument på en skrivare som är utdelad på servern så skulle jag kunna bli inloggad på intranätet lätt som en plätt genom att bara veta ett användarnamn som någon har i företaget? Skulle jag aldrig acceptera. Men det är jag det.
Om du läste mitt inlägg så krävs det inga inställningar i IE för att det ska fungera, bara men vet hur man lägger till en GPO i AD't - Det borde man veta om man har ett AD, annars kan man lika väl kasta ut det :) |
Citat:
Menar du att man kan sno någons identitet av att bara känna till användarnamnet? Min logg ser ut såhär precis nu: \\172.26.82.15 NBANKS Windows 2002 Serv 1 21:00:54 \\172.29.80.21 JDAVIS Windows 2002 Serv 1 19:45:54 Jag förutsätter att man inte kan bli att heta JDAVIS i denna lista om man inte har loggat in med de uppgifter som ligger i AD:t. Men jag kanske har fel? |
NET visar ju bara vilka som fått en session till just den servern.
Du får en session genom att du exempelvis kan skriva ut på en skrivare (som använder NET share). Skrivare brukar du kunna komma åt utan att behöva logga in på servern, beror på lite hur dom är utdelade. Således kan du logga in på en dator (utan domänen) där du själv skapar ett användarnamn som heter samma sak som ett som ligger i domänen (Men du loggar inte in i domänen) - Sedan skriver du ut på en delad skrivare på servern, och NET sessions borde visa dig där. Är inte 100% på att det fungerar, men du kan ju testa själv :) |
Jag frågade dom idag och dom sa att utan att man behöver ett admin domänkonto för att göra något överhuvudtaget på nätverket. Det går inte att skriva ut eller göra ett jota utan att vara inloggad enligt vad en av deras tekniker säger.
Men ett stort tack ska du ha som kritiserar... Tack vare dig kanske vi hittar nåt som inte håller. |
Skulle man få en session utan att behöva logga in med ett lösenord så skulle jag personligen säga att nått är fel i nätverket...
|
Se för f-n till att intranät endast går komma åt internt om du ska använda ntlm för att få tag i användarnamn eller ser till att den även kollar även vilken AD domän den sänder.
Annars kan du med valfri dator se till att komma in från valfritt användarnamn, om du då inte kör någon kontroll även med LDAP mot AD för verkligen se om det är korrekt. Antingen ntlm och endast läsa ut användare utan någon kontroll om det är sant - lättast Eller använda ntlm och köra köra auth på riktigt, går lösa smidig med IIS annars får du köra med ldap eller liknande. Sedan finns det olika konton med i AD, användarkonton och datorkonton. Teknisk sätt kan en dator ha en rättighet i nätverkat utan att behöva någon använderkonto som loggat in. Att använda net session låter inte som någon stabil fungerande lösning i det stora hela, visst det kan fungera. Bästa sättet är ldap för att kunna läsa ut valfri data som kan behövas, annars kan du säkert lösa det genom att införa att det körs ett script när användaren loggar in som skickar den infon till någon applikation på intranät servern. |
Citat:
|
Citat:
Fast vad jag förstår går detta inte att göra med AD't utan att tvinga till en extra inloggning. Förutsättningarna är alltså "redan inloggad windowsanvändare surfar till siten, som transparent identifierar windowsanvändaren", och det verkar inte gå i apache. Men i alla fall, krav på intern IP ska det absolut vara och om man inte kan få en session utan att vara inloggad med lösenord mot domänen så borde det fan vara vattentätt. Det vore jäkligt skönt om man kan köra skarpt mot AD't, men om det inte går att mappa IP-> user så är det värdelöst i detta fall... |
Citat:
Eller kör du ett skript på varje dator när dom loggar in, som läser ut USERNAME samt USERDOMAIN. Du kan ju köra ett exempel i cmd, typ echo %USERNAME% %USERDOMAIN% sedan skickar det som POST mot webbservern som loggar det även tar ut IP samtidigt. Detta är självklart ingen ubersäker lösning, frågan är mer om ni har anställda som är så pass kunniga som dom skulle göra något. |
Hmm... Ja, det vore kanske ett alternativ att göra så...
Men frågan är om nån verkligen kan bryta sig in på session-listan utan att vara inloggad på riktigt. Jag försöker komma in på den listan utifrån, men jag lyckas inte hamna där, så frågan är vad man behöver göra för att dyka upp där. Om det inte går att hamna på den listan utan att vara inloggad mot företagets domän så måste denna lösning vara tillräckligt säker. Det borde ju (enligt mina tolkningar) inte gå att hamna på den listan om man är ansluten mot någon annan domän, på något annat nätverk. |
Citat:
|
Citat:
Det finns även bättre program än "net session" i denna toolbox: http://technet.microsoft.com/sv-se/sysinte...545(en-us).aspx |
Citat:
|
Alla tider är GMT +2. Klockan är nu 08:58. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson