Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Credentials med DirectoryServices

Postades av 2008-04-29 10:15:23 - Ann Kapborg, i forum asp.net generellt, Tråden har 6 Kommentarer och lästs av 1714 personer

Hej!

Vill göra en webbsida för upplåsning av konton.

Denna kod har jag bl.a. provat:

Try
            Dim uEntry As New DirectoryEntry("kontot")
            With uEntry
                uEntry.Properties("LockOutTime").Value = 0
            End With
            uEntry.CommitChanges()
            uEntry.Close()

            'uEntry.Invoke("ChangePassword", New Object() {"old", "new"})
            'uEntry.CommitChanges()

        Catch ex As Exception
        End Try

     


Som synes så ligger även ett lösenordsbyte med och är utremmat. Det fungerar fint.
Att ett utlåst konto inte kan låsa upp sig själv är jag på det klara med.
Vad jag inte har listat ut är hur jag skickar med vilket konto som utför sökningen. Är inloggad med tillräckliga rättigheter när jag kör koden och har även provat impersonate=true.

Försökt googla mig till det och en del anser att unlock inte ligger i AD utan i flaggor, blir inte riktigt klok på det och all hjälp mottages tacksamt för jag blir mest förvirrad av den information jag tar till mig.

Den kod jag lagt här förstår jag men inte hur jag får tillräckligt med rättigheter.

//Ann


Svara

Sv: Credentials med DirectoryServices

Postades av 2008-04-30 08:25:21 - Pelle Johansson

inparametern på directoryentry bör vara en sökväg. Sökvägen får du nog enklast ut om du gör en search först och directorysearcher.path skickas in till directoryentryt.


Svara

Sv:Credentials med DirectoryServices

Postades av 2008-04-30 10:14:00 - Ann Kapborg

Tack,
Sökvägen har jag. Det fungerar att hitta kontot men jag får inte låsa upp det.

Här är en function jag inte får att fungera. Googling ger vid handen att anledningen till att den returerar samma oavsett om kontot är låst eller inte beror på att jag söker med det kontot som inte kan ge uppgiften för att det är låst.

Function GetIfLockedUser(ByVal path As String) As Boolean
        Dim strError As String
        Try
            Dim child As New System.DirectoryServices.DirectoryEntry(path)
            Dim searcher As New DirectorySearcher(child)
            Dim result As SearchResult
            Dim userEntry As DirectoryEntry
            searcher.Filter = "(SAMAccountname="låstakontot")"
            searcher.CacheResults = False
            result = searcher.FindOne
            userEntry = result.GetDirectoryEntry
            With userEntry
                If userEntry.Properties("LockOutTime").Value = 0 Then
                    Return False
                Else
                    Return True
                End If
            End With

        Catch ex As Exception
            strError = ex.ToString
        End Try
    End Function


Autentiseringen i koden som anropar funktionen:

 
 rootDSE = New DirectoryEntry(String.Format("LDAP://{0}/rootDSE", _
            dcDNS), Username, Password, AuthenticationTypes.Secure Or _
            AuthenticationTypes.Sealing Or AuthenticationTypes.ServerBind)


Där ser variabeln för path ut så här:
Dim path As String = "LDAP://vårdomän"




//Ann


Svara

Sv: Credentials med DirectoryServices

Postades av 2008-04-30 23:00:37 - Pelle Johansson

Användarkontot du skickar in, har den rätt att se / ändra dessa uppgifter på andras konton?


Svara

Sv:Credentials med DirectoryServices

Postades av 2008-05-01 09:28:28 - Ann Kapborg

Användarkontot är samma som jag använder när jag resettar lösenord och låser upp konton direkt på dc:n.

Har hittat en e-bok som tydligen beskriver ämnet i kapitel 10. :) http://www.directoryprogramming.net

Googlade vidare och hittade ett foruminlägg där de skriver att boken beskriver bra men att det är knepigt, vilket är den allmänna uppfattningen verkar det som när jag googlar. Det finns ett annat angreppssätt som handlar om att titta på flaggor i stället men jag är inte beredd att byta infallsvinkel riktigt ännu, ska bli spännande att läsa bokens exempel med andra ord LOL.

Tänkte också koppla upp mig och leta rätt på länken till koden jag utgick från i början och posta här. Har inte fått den att spela rakt av och det kanske är lätt för ett tränat öga att se varför.

Så får jag se vad det blir utav det. Hursomhelst så är jag tacksam för hjälp och kommer posta vidare om hur det fortlöper.


//Ann


Svara

Sv: Credentials med DirectoryServices

Postades av 2008-05-04 10:51:34 - Ann Kapborg

Länken med koden från codeproject har tagits bort och jag har inte inte hittat någon som använder hela koden (lösenordskoden finns) vid googling, så mitt nästa försök blir med e-boken.

Så här såg koden ut före jag tog bort var funktionen GetIfLockedUser anropades - jag kan inte för mitt liv komma ihåg var. Tog bort den då jag bara gjorde för lösenord initialt och sidan finns ju kvar (ack vad jag bedrog mig LOL).

Någon som direkt ser hur det ska göras? dying to know :).

Det jag vill göra är alltså att låsa upp ett låst konto via ett webbgränssnitt. I den här koden nöjer jag mig med att få rätt svar, dvs om kontot är låst eller inte.

Imports System.DirectoryServices



Partial Class _Default

    Inherits System.Web.UI.Page





    Function GetIfLockedUser(ByVal path As String) As Boolean

        Dim strError As String

        Try

            Dim child As New System.DirectoryServices.DirectoryEntry(path)

            Dim searcher As New DirectorySearcher(child)

            Dim result As SearchResult

            Dim userEntry As DirectoryEntry

            searcher.Filter = "(SAMAccountname=Username)"

            searcher.CacheResults = False

            result = searcher.FindOne

            userEntry = result.GetDirectoryEntry

            With userEntry

                If userEntry.Properties("LockOutTime").Value = 0 Then

                    Return False

                Else

                    Return True

                End If

            End With



        Catch ex As Exception

            strError = ex.ToString

        End Try

    End Function


    Function AuthenticateUser(ByVal path As String, ByVal Username As String, ByVal oldPassword As String) As Boolean



        Dim direntry As New DirectoryEntry(path, Username, oldPassword)



        Try

            Dim nat As Object

            'if the NativeObject can be created using those credentials

            'then they are valid

            nat = direntry.NativeObject

            Return True

        Catch

            Return False



        End Try

    End Function



    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdPass.Click





        Dim dcDNS As String = "SERVER-NAMN"

        Dim rootDN As String

        Dim rootDSE As DirectoryEntry

        Dim searchRoot As DirectoryEntry

        Dim userEntry As DirectoryEntry

        Dim searcher As DirectorySearcher

        Dim results As SearchResultCollection

        Dim result As SearchResult

        Dim oldPassword As String = txtOldPass.Text

        Dim newPassword As String = txtNewPass.Text

        Dim Username As String = txtUser.Text

        Dim path As String = "LDAP://DOMÄN"



        Try

            '=========================================================================

            'Here I am binding the directory to the root with the current

            'users name and password instead of using an admin login to authenticate

            'The reason for this is that the users are not admin and only admin

            'can use the setpassword invoke method. thus, authenticated users will

            'use the change password method

            'note the authenicationtypes here 

            'you need to either use SecureSocketsLayer or Kerberos (Secure + Sealing)



            result = Nothing



            rootDSE = New DirectoryEntry(String.Format("LDAP://{0}/rootDSE", _

            dcDNS), Username, oldPassword, AuthenticationTypes.Secure Or _

            AuthenticationTypes.Sealing Or AuthenticationTypes.ServerBind)



            rootDN = DirectCast(rootDSE.Properties("defaultNamingContext").Value, String)

            searchRoot = New DirectoryEntry(String.Format("LDAP://{0}/{1}", _

            dcDNS, rootDN), Username, oldPassword, AuthenticationTypes.Secure Or _

            AuthenticationTypes.Sealing Or AuthenticationTypes.ServerBind)

            '==================================================================

            '------------------------------------------------------------------------

            'Find the user by their username in the directory using the 

            'DirectorySearcher()



            searcher = New DirectorySearcher(searchRoot)

            searcher.Filter = String.Format("sAMAccountName={0}", Username)

            searcher.SearchScope = SearchScope.Subtree

            searcher.CacheResults = False



            results = searcher.FindAll



            '-------------------------------------------------------------------------



            '*****************************************************

            For Each result In results

                'only use this method on .NET 1.1 or higher 

                'otherwise, get the adsPath value and build a new

                'DirectoryEntry with the supplied credentials 

                userEntry = result.GetDirectoryEntry()

                Exit For

                'this is redundant because sAMAccountName is unique 

                'in the domain, but it is done for clarity

                'Bind the user's DirectoryEntry (found from result search) 



            Next

            result = Nothing

            userEntry = result.GetDirectoryEntry()

            If userEntry Is Nothing Then

                lblInfo.Text = "Ogiltigt användarnamn!"

                Exit Sub

            End If



            'Invoke the ChangePassword method (not the SetPassword method, since that 

            'is used by admins to reset a password) 



            userEntry.Invoke("ChangePassword", New Object() {oldPassword, newPassword})

            userEntry.CommitChanges()



            '****************************************************



            lblInfo.Text = "<b>SUCCESS</b>"

            'If Not Session("User") Is Nothing Then

            '    txtuser.Text = CStr(Session("User"))

            '    GetUserPasswordADInfo(CStr(Session("User")))

            'Else

            '    GetUserPasswordADInfo(Trim(txtuser.Text))

            'End If



        Catch ex As Exception 'System.Reflection.TargetInvocationException

           


            If AuthenticateUser(path, Username, oldPassword) = True Then

                lblInfo.Text = "TRYCKFELSNISSE"

            Else

                lblInfo.Text = "AD FÖRHINDRAR"

            End If





        Finally 'these prevent other memory leaks 

            userEntry = Nothing

            If Not userEntry Is Nothing Then userEntry.Dispose()

            results = Nothing

            If Not results Is Nothing Then results.Dispose()

            searcher = Nothing

            If Not searcher Is Nothing Then searcher.Dispose()

            searchRoot = Nothing

            If Not searchRoot Is Nothing Then searchRoot.Dispose()

            rootDSE = Nothing

            If Not rootDSE Is Nothing Then rootDSE.Dispose()

        End Try



    End Sub



  
End Class




Svara

Sv:Credentials med DirectoryServices

Postades av 2008-05-12 15:46:02 - Ann Kapborg

I korta drag hade jag inte varit uppmärksam på result som enskild företeelse och som collection (results). Verkar också som att PropertiesToLoad måste finnas med, dvs den egenskap man vill titta på för kontot.

Fick ordning på det till sist:

<code:asp.net>

Imports System.DirectoryServices
Partial Class upplas
Inherits System.Web.UI.Page

Function AuthenticateUser(ByVal path As String, ByVal Username As String, ByVal Password As String) As Boolean
Dim direntry As New DirectoryEntry(path, Username, Password)
Try
Dim nat As Object
'if the NativeObject can be created using those credentials
'then they are valid
nat = direntry.NativeObject
Return True
Catch
Return False
End Try
End Function


Protected Sub cmdPass_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdPass.Click

Dim dcDNS As String = "DC"
Dim rootDN As String
Dim rootDSE As DirectoryEntry
Dim searchRoot As DirectoryEntry
Dim userEntry As DirectoryEntry
Dim searcher As DirectorySearcher
Dim results As SearchResultCollection
Dim result As SearchResult
Dim Password As String = txtPass.Text
Dim Username As String = txtUser.Text
Dim path As String = "LDAP://domain"
Dim AccountLocked As String = "låstakontot" 't'nkte delegera via comboboxar till olika konton.
Dim FilterStart As String = "(SAMAccountName="
Dim FilterSlut As String = ")"
Dim Filtering As String = FilterStart + AccountLocked + FilterSlut
Try

result = Nothing

rootDSE = New DirectoryEntry(String.Format("LDAP://{0}/rootDSE", _
dcDNS), Username, Password, AuthenticationTypes.Secure Or _
AuthenticationTypes.Sealing Or AuthenticationTypes.ServerBind)

rootDN = DirectCast(rootDSE.Properties("defaultNamingContext").Value, String)
searchRoot = New DirectoryEntry(String.Format("LDAP://{0}/{1}", _
dcDNS, rootDN), Username, Password, AuthenticationTypes.Secure Or _
AuthenticationTypes.Sealing Or AuthenticationTypes.ServerBind)

searcher = New DirectorySearcher(searchRoot)
searcher.Filter = Filtering
searcher.SearchScope = SearchScope.Subtree
searcher.CacheResults = False


searcher.PropertiesToLoad.Add("LockOutTime")
searcher.PropertiesToLoad.Add("cn") 'kan användas för ett bättre meddelande vid resultat

result = searcher.FindOne

userEntry = result.GetDirectoryEntry()



If userEntry Is Nothing Then
lblInfo.Text = "Kontot du vill låsa upp verkar inte finnas!" 'detta bör inte kunna hända om de läggs i combobox, hämtade från AD eller inlagda via kod
Exit Sub
End If

If result.Properties("LockOutTime").Item(0) > 0 Then
userEntry.Properties("LockOutTime").Value = 0
userEntry.CommitChanges()
End If

lblInfo.Text = result.Properties("cn").Item(0) & " är upplåst"

Catch ex As Exception

If AuthenticateUser(path, Username, Password) = True Then
lblInfo.Text = "Detta är ett felmeddelande." 'bör inte bli detta fel
Else
lblInfo.Text = "Din inloggning lyckades inte!"
End If



userEntry = Nothing
If Not userEntry Is Nothing Then userEntry.Dispose()
results = Nothing
If Not results Is Nothing Then results.Dispose()
searcher = Nothing
If Not searcher Is Nothing Then searcher.Dispose()
searchRoot = Nothing
If Not searchRoot Is Nothing Then searchRoot.Dispose()
rootDSE = Nothing
If Not rootDSE Is Nothing Then rootDSE.Dispose()
End Try


End Sub

End Class
</code>

Så långt är jag glad, nu gäller det att få detta http://support.microsoft.com/?kbid=294952 att fungera också.

//Ann


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
885
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies