0

我有一个在 IIS 7.5 上运行的自定义 HTTP 模块,请求将来自同一 Active Directory 环境中的不同机器。我是否可以在运行服务器端的 HTTP 模块中从请求(或查找,如果我知道 LDAP 路径?)中获取当前用户(他们的 AD 名称?)?

我不是 AD 专家,但我查看HTTPApplication了模块中实例(见下文)的不同属性,但没有看到任何明显的东西。

Private Sub AuthenticateRequest(sender As Object, e As EventArgs)

        Dim oHttpApplication As HttpApplication = CType(sender, HttpApplication)
        '...
        ' Get AD Info from oHttpApplication.Request?
        '...
End Sub

有谁知道这是否可能或知道实现此目的的方法?

更新:

我在下面添加了我的解决方案。

4

2 回答 2

1

我的解决方案 - 在 VB.NET 中:

Dim username As String = Thread.CurrentPrincipal.Identity.Name

注意:我的链接中问题的答案继续使用 aPrincipalContextUserPrincipal对象,但对于我的场景,我需要的只是用户名。我还想指出,在测试该解决方案时,这一行:

pc = new PrincipalContext(ContextType.Domain, "active.directory.domain.com")

对我来说没有域也可以正常工作:

pc = new PrincipalContext(ContextType.Domain)

因此,希望这对将来的某人有所帮助!

于 2013-02-25T16:03:54.893 回答
0

修改 IIS 设置:

在 IIS 中禁用匿名身份验证并启用Windows 身份验证。

修改 Web 应用程序配置文件:

启用模拟

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

C#代码:

using System.Security.Principal


var user = WindowsIdentity.GetCurrent().Name;
于 2013-02-24T01:25:48.503 回答