【问题标题】:Impersonate with Delegation or More than one hop on Kerberos? Completely lost在 Kerberos 上模拟委托或不止一跳?完全迷失
【发布时间】:2012-03-03 04:47:46
【问题描述】:

我的问题是如何处理安全性和模拟的正确实施,这将在客户端计算机上工作并正确地向我的 IIS 服务器进行身份验证,该服务器将仍然有效的模拟票证与 LDAP 请求一起传递。

我的系统是运行在我公司内部网上的独立服务器,它托管域控制器、LDAP 服务器等,并使用 Kerberos 协议。

  • 系统信息:在 Windows 7 x64 上具有 Windows Auth 和 Impersonate 的 IIS7
  • 网络信息:IIS 6、LDAP、Kerberos

这是我的 VB.NET 方法。

Protected FirstName, LastName, EMail As String
Protected Sub Lookup(ByVal UserName As String)
    UserName = Trim(UserName)
    UserName = Replace(UserName, "\", "/")
    UserName = Right(UserName, Len(UserName) - InStr(1, UserName, "/"))

    Using (Hosting.HostingEnvironment.Impersonate) 'ADDED
        Dim directoryEntry As New DirectoryEntry("LDAP://dl/DC=dl,DC=net")
        'directoryEntry.AuthenticationType = AuthenticationTypes.Delegation 'REMOVED

        Dim ds As New DirectorySearcher(directoryEntry)
        Dim r As SearchResult
        Try
            ds.PropertiesToLoad.Add("givenName") 'First Name
            ds.PropertiesToLoad.Add("sn")        'Last Name
            ds.PropertiesToLoad.Add("mail")      'Email

            ds.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName=" & UserName & "))"
            r = ds.FindOne 'Query LDAP; find record with UserName.

            'Populates all the variables retrieved from LDAP.
            FirstName = If(r.Properties.Contains("givenName"), Trim(r.Properties("givenName").Item(0)), "")
            LastName = If(r.Properties.Contains("sn"), Trim(r.Properties("sn").Item(0)), "")
            If IsNothing(r.Properties.Contains("mail")) Then
                EMail = If(r.Properties.Contains("userPrincipalName"), Trim(r.Properties("userPrincipalName").Item(0)), "")
            Else
                EMail = If(r.Properties.Contains("mail"), Trim(r.Properties("mail").Item(0)), "")
            End If
            EMail = EMail.ToLower
        Catch ex As Exception
            'Error Logging to Database Here
        End Try
    End Using
End Sub

请提出任何必要的问题,以获得帮助我所需的信息。我已经研究了好几个星期了,我觉得模拟的变量太多了,我很容易迷失方向。我只是不知道如何在我的代码中实现这一点......我对 .NET 还是很陌生 :(

【问题讨论】:

  • 答案就在布赖恩的建议中。事实上,我的服务器没有被域控制器授权进行委派。一旦我的 IT 部门对此进行了更改并添加了Using 声明,如我更新的代码中所述,一切都运行良好:)

标签: active-directory windows-authentication impersonation kerberos delegation


【解决方案1】:

您无需配置AuthenticationType 即可使用。但是,您需要确保允许托管上述代码的服务帐户(或计算机帐户,如果是网络服务)委托给您环境中所有 DC 上的 LDAP 服务。

【讨论】:

  • 非常感谢!!我不敢相信这是这样的事情,但我对 AD 和 IT 管理员几乎一无所知。非常感谢您在无数小时的挫折和研究之后为我指明了正确的方向。 ^.^
猜你喜欢
  • 2019-11-24
  • 2012-08-03
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2015-02-27
  • 2015-11-29
相关资源
最近更新 更多