none
請問VB.NET 2005讀取AD資料 RRS feed

  • 問題

  • 請問如何抓取現在登入的AD USER然後比對他AD內登錄的資料?

    有無控制項與其說明呢?

     

    謝謝

    2007年1月10日 上午 09:52

解答

  •  小朱 寫信:

    自動抓取就用 :

    Dim userPrincipal As WindowsPrincipal = CType(Thread.CurrentThread.CurrentPrincipal, WindowsPrincipal)
    Dim userID As String = userPrincipal.Identity.Name

    ' 寫程式用 userID 來搜尋 AD.
    ' 要設定 LDAP 字串來搜尋,你可以查詢 Windows SDK (MSDN Library) 的 Active Directory 主題。

    用 WindowsIdentity.GetCurrent() 也可以取得目前使用者的 WindowsIdentity 物件。

    如何使用USERID來搜尋AD? 我目前用的方法是

     

          Dim ds As New System.DirectoryServices.DirectoryEntry
            ds.Path = ("LDAP://CN=administrator,CN=users,DC=DomainName,DC=DomainName")

            Console.Write(ds.Properties("name").Item(0))
            For Each propName As String In ds.Properties.PropertyNames
                Console.Write(propName)
            Next

    只能指定FullName 而且要指定OU才可行

    如果使用UserID(abc\username)該如何搜尋

    謝謝

    2007年1月11日 上午 10:06

所有回覆

  • 您好這段程式碼我曾經使用過 但是我的需求是

    我的Winform "自動抓取" 目前登入的USER 並在AD找尋此USER列出他的屬性(姓名.地址等)

    是否能夠這樣作?

    2007年1月11日 上午 02:17
  • 自動抓取就用 :

    Dim userPrincipal As WindowsPrincipal = CType(Thread.CurrentThread.CurrentPrincipal, WindowsPrincipal)
    Dim userID As String = userPrincipal.Identity.Name

    ' 寫程式用 userID 來搜尋 AD.
    ' 要設定 LDAP 字串來搜尋,你可以查詢 Windows SDK (MSDN Library) 的 Active Directory 主題。

    用 WindowsIdentity.GetCurrent() 也可以取得目前使用者的 WindowsIdentity 物件。

    2007年1月11日 上午 02:30
    版主
  • 請問這樣有無權限問題

    如果我程式能否就以現有登入帳號之權限向AD物件作查詢?

    2007年1月11日 上午 02:33
  • 以下為使用 DirectoryService 存取 AD 時的安全性需求(取自 SDK 文件):

    呼叫端安全性需求

    System.DirectoryServices.dll 與 System.DirectoryServices.Protocols.dll 程式庫包含 System.DirectoryServicesSystem.DirectoryServices.ActiveDirectorySystem.DirectoryServices.Protocols 命名空間的實作。這些是要求其呼叫端擁有不受限制的 DirectoryServicesPermission,以存取程式庫所公開之類別、方法和屬性的安全程式庫。

    經由執行階段程式碼存取安全性系統接收不完全信任的應用程式,除非程式庫以 AllowPartiallyTrustedCallersAttribute 標記,否則無法呼叫共用的管理程式庫。依預設,所有從近端內部網路或網際網路區域執行的程式碼都是部分受信任。.NET Framework 2.0 中,System.DirectoryServices.dll 與 System.DirectoryServices.Protocols.dll 都有套用 AllowPartiallyTrustedCallersAttribute,以便程式碼可從部分信任內容執行或經由部分信任程式碼呼叫。因此,只要呼叫端被授與不受限制的 DirectoryServicesPermission,此呼叫端不需要是完全信任的組件也可存取 System.DirectoryServices.dll 與 System.DirectoryServices.Protocols.dll

    要求權限

    連結要求會在 Just-in-Time 編譯,而非執行階段當中執行安全性檢查,且只會檢查程式碼的直接呼叫端。如同一般要求,連結要求不會執行完整的堆疊查核行程。連結要求平均比一般要求快很多,但使用連結要求的程式碼仍容易遭受引誘攻擊。任何標記為連結要求之方法或類別的呼叫端,必須執行應用程式設計人員視為必要的任何安全性檢查。如需 要求連結要求 的深入比較,請參閱 Demand 和 LinkDemand 的比較

    System.DirectoryServicesSystem.DirectoryServices.ActiveDirectorySystem.DirectoryServices.Protocols 命名空間的所有進入點可對不受限制的 DirectoryServicesPermission 執行要求 (例如,DirectoryEntryDirectorySearcherDirectoryContextLdapConnectionDsmlSoapHttpConnection)。進入點會對其他必要權限執行連結要求。如需適用於此三個命名空間的類型與方法之要求型態的相關資訊,請參閱 System.DirectoryServicesSystem.DirectoryServices.ActiveDirectorySystem.DirectoryServices.Protocols 的命名空間參考區段。

    授權不受限制的 DirectoryServicesPermission

    依預設,完全信任的組件會被授與不受限制的 DirectoryServicesPermission。使用如程式碼存取安全性原則工具 (Caspol.exe) Caspol.exe 的工具,也可將此權限明確地授與其他組件。


    2007年1月11日 上午 02:46
    版主
  • 對SDK的敘述都有看沒有懂

    我先請問我的構想是否能做到

    當USER已經以AD帳號登入系統後

    執行我的程式

    將會自動連線到AD抓取此使用者帳戶內姓名的資料

    但不要再次輸入帳號密碼(Single Sign-in)

    大致這樣

    2007年1月11日 上午 03:05
  • 你可以用目前使用者的帳戶去下 Directory 的搜尋,看會不會有拒絕存取的問題。
    應該是可以只搜尋到目前使用者的資訊,但修改可能就不行。
    2007年1月11日 上午 03:42
    版主
  • 請問有無符合我需求的範例可供參考

     

    謝謝

    2007年1月11日 上午 09:09
  •  小朱 寫信:

    自動抓取就用 :

    Dim userPrincipal As WindowsPrincipal = CType(Thread.CurrentThread.CurrentPrincipal, WindowsPrincipal)
    Dim userID As String = userPrincipal.Identity.Name

    ' 寫程式用 userID 來搜尋 AD.
    ' 要設定 LDAP 字串來搜尋,你可以查詢 Windows SDK (MSDN Library) 的 Active Directory 主題。

    用 WindowsIdentity.GetCurrent() 也可以取得目前使用者的 WindowsIdentity 物件。

    如何使用USERID來搜尋AD? 我目前用的方法是

     

          Dim ds As New System.DirectoryServices.DirectoryEntry
            ds.Path = ("LDAP://CN=administrator,CN=users,DC=DomainName,DC=DomainName")

            Console.Write(ds.Properties("name").Item(0))
            For Each propName As String In ds.Properties.PropertyNames
                Console.Write(propName)
            Next

    只能指定FullName 而且要指定OU才可行

    如果使用UserID(abc\username)該如何搜尋

    謝謝

    2007年1月11日 上午 10:06
  • 只能這樣了

    Environment.UserName

    取得目前登陸的帳號,因為某某人是拿AD登陸的

    2007年1月18日 上午 07:58
  • 您好我看不太懂您的意思
    2007年1月18日 上午 09:58
  • 你用的是 LDAP 語法,你可以改用 WinNT 語法來試看看 .
    因為我沒有 Active Directory 環境,所以無法幫你測試 ...

    現在 VB 的 sample code 比較少,你可能要試著閱讀 C++ code,像這個:
    http://msdn2.microsoft.com/en-us/library/ms676882.aspx

    2007年1月18日 下午 12:37
    版主
  • Function CurrentUserInfo(ByVal FieldName As String) As String
            Dim userPrincipal As WindowsPrincipal = CType(Thread.CurrentPrincipal, WindowsPrincipal)
            Dim userID As String = userPrincipal.Identity.Name
            Dim ds As System.DirectoryServices.DirectoryEntry
            ds = New System.DirectoryServices.DirectoryEntry("WinNT://" & Mid(userID, 1, InStr(userID, "\") - 1) & "/" & Mid(userID, InStr(userID, "\") + 1))
            Return ds.Properties(FieldName).Value
        End Function

    已經利用這個方法查出來了

    可是我又有另一個問題

    我該如何列出他的SID還有以SID如何查該帳號的資料

    有辦法這麼做嗎?

    2007年1月25日 上午 06:08