Avatar billede alvion Nybegynder
21. maj 2003 - 22:37 Der er 17 kommentarer og
1 løsning

Findes der en ActiveX til at aflæse en brugers Windows login data

Jeg ved ikke rigtig, hvor jeg skal placere dette spørgsmål...

Jeg er ved at opbygge et webbaseret intranet, hvor brugerne skal være logget ind, inden de kan anvende intranettet.

Alle brugerne er i forvejen logget ind i Active Directory så et eller andet sted er det jo lidt absurd, hvis de skal logge ind igen, når de åbner intranet siden.

Derfor: Findes der ikke en ActiveX control (eller lignende) i Internet Explorer, som giver adgang til en eller anden form for identifikation af brugeren i Active Directory. Hvis ja, kunne jeg sende denne oplysning til webserveren og slå de nødvendige ekstra oplysninger op via LDAP.

Bemærk at der er tale om en intranet zone, derfor kører vi med en mindre sikkerhed omkring ActiveX controls. Desuden kan jeg stille som krav at alle brugerne kører Internet Explorer 6.0.

Alle ideer modtages med kyshånd. Også forslag til, hvis jeg burde stille spørgsmålet i en anden kategori.
Avatar billede mikmakmuk Nybegynder
21. maj 2003 - 22:41 #1
hvilket sprog bruger du?
Avatar billede mortrr Praktikant
21. maj 2003 - 22:44 #2
Kunne du ikke gøre det på serveren? I fx asp.
Avatar billede alvion Nybegynder
21. maj 2003 - 22:45 #3
Det er jo som sagt noget som jeg regner med at kunne aflæse på klientsiden (altså i browseren), så Javascript eller VBScript er valgfrit.
Avatar billede mortrr Praktikant
21. maj 2003 - 22:46 #4
På serveren har du alle muligheder for at kigge i AD'en, som du selv er inde på.

Hvis du sætter sitet til NT authentication, kan du aflæse brugerens login via servervariables, og lave et lookup via LDAP.
Avatar billede alvion Nybegynder
21. maj 2003 - 22:46 #5
mortr -> Det kan jeg jo kun, hvis jeg modtager nogle oplysninger fra klienten. Og jeg regner ikke med, at Explorer automatisk sender sådanne oplysninger med til serveren ved et HTTP-request?
Avatar billede alvion Nybegynder
21. maj 2003 - 22:47 #6
mortrr -> "Hvis du sætter sitet til NT authentication..."

Får brugeren så ikke et login-skærmbillede op, første gang han åbner siden?
Avatar billede mortrr Praktikant
21. maj 2003 - 22:48 #7
Nej - ikke hvis sitet er i intranet-zonen. Så logger IE automatisk ind.
Avatar billede alvion Nybegynder
21. maj 2003 - 22:48 #8
mortrr -> Hey det var smart. Det må jeg lige prøve...
Avatar billede mikmakmuk Nybegynder
21. maj 2003 - 22:51 #9
Skal du bare logge en bruger ind automatisk på baggrund af de data han bruger til at logge ind i windows?
Avatar billede alvion Nybegynder
21. maj 2003 - 22:52 #10
mikmakmuk -> Jep
Avatar billede mortrr Praktikant
21. maj 2003 - 22:52 #11
Hvis du aflæser via fx
cLogonUser = Request.ServerVariables("LOGON_USER")
Vil du modtage det som "domain\user"
Det gør det dejligt nemt på sites der tilgås af brugere fra flere domains.

Den enkleste måde at hente oplysninger om brugeren er
set oUser = GetObject("WinNT://" & cLogonUser & ",user")

Det vil give dig de basale info om brugeren.
Response.Write "Velkommen " & oUser.FullName
Avatar billede mortrr Praktikant
21. maj 2003 - 22:53 #12
Glemte lige at cLogonUser lige skal gennem en
cLogonUser=replace(cLogonUser,"\","/")
før den bruges med getobject
Avatar billede mikmakmuk Nybegynder
21. maj 2003 - 23:03 #13
Jeg lavede engang et intranet og der krævede jeg at brugerne loggede ind mindst en gang. Så kunne de så vælge at få lagt en cookie på deres maskine så de ikke behøvede at taste deres brugernavn og password ind hver gang. Jeg valgte dog at fjerne cookien engang i mellem. Det er vel lidt en smagssag hvordan man gerne vil have det til at virke :-)
Avatar billede alvion Nybegynder
21. maj 2003 - 23:11 #14
mortrr -> Du er jo genial. Det er lige præcist således at jeg vil have det. :-)

Smid et svar og du får dine point.

Et lille tillægsspørgsmål: Jeg skal slet ikke lave det i ASP men i PHP eller Python. Derfor har jeg nok ikke GetObject() funktionen til rådighed, men skal istedet bruge LDAP. Ved du, hvordan ovenstående GetObject kald skal formuleres i LDAP sprog?
Avatar billede alvion Nybegynder
21. maj 2003 - 23:11 #15
mikmakmuk -> Det er lige præcis det, som jeg vil undgå - mortrr har ramt plet.
Avatar billede mikmakmuk Nybegynder
21. maj 2003 - 23:12 #16
så er alt jo godt :-)
Avatar billede mortrr Praktikant
21. maj 2003 - 23:29 #17
Det var dog et ondsindet spørgsmål.
Jeg aner faktisk ikke hvordan LDAP er implementeret i php.

LDAP pathen til brugeren er:
LDAP://CN=Brugerens unikke navn,OU=Primær gruppe,DC=domainet,DC=ent

Jeg bruger normalt ADO provideren til LDAP, som virker på en helt anden måde.
Her kan man lave forespørgsler i en slags sql.
rsUser=objCon.Execute("SELECT distinguishedName, name from '" + strADsPath + "' WHERE sAMAccountName='" + cUserName + "'");
(Den distinguishedName der står herover er faktisk det unikke navn der skal bruges i LDAP-pathen)

Det foregår via ADO, så det kunne man formentligt også bruge fra, i det mindste, php.

et vbscript eksempel:

ADS_SCOPE_SUBTREE=2

Set objDSE = GetObject("LDAP://rootDSE")
defContext = objDSE.Get("defaultNamingContext")
' Returnerer fx "DC=domainet, DC=ent"

Set objCon = CreateObject("ADODB.Connection")
Set objCmd = CreateObject("ADODB.Command")
objCon.ConnectionString = "Active Directory Provider"
objCon.Provider = "ADsDSOObject"
objCon.Properties("User ID") = LDAPUser
objCon.Properties("Password") = LDAPPassword
' LDAPUser og password er lavet til situationer
' hvor man ønsker at læse informationer som brugeren ikke selv må læse i AD

objCon.Properties("Encrypt Password") = True
objCon.Open

objCmd.ActiveConnection = objCon
objCmd.Properties("Timeout") = 30 ' seconds
objCmd.Properties("Page Size") = 1000
objCmd.Properties("searchscope") = ADS_SCOPE_SUBTREE

strADsPath = "LDAP://" & DCServer & "/" & defContext
' DCServer er den AD server jeg ønsker at bruge

objCmd.CommandText = "SELECT distinguishedName, name from '" & strADsPath & "' WHERE sAMAccountName='" & cUserName & "'"
' cUsername er fra login_user
set rsUser = objCmd.Execute
if not rsUser.EOF then
    Response.Write "Velkommen " & rsUser.Fields("name").Value
    strDisName = rsUser.Fields("distinguishedName").Value
    LDAPPath="LDAP://" + strDisName
end if
rsUser.Close
Avatar billede _darkstar_ Nybegynder
21. maj 2003 - 23:36 #18
Vedrørende php: der er masser af gode tips i phps manual på php.net. Se kommentarerne i bunden af denne side:

http://www.php.net/manual/en/ref.ldap.php
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester