2013-01-15 49 views
0

我正在使用以下代码来确定用户是否在特定组中。该代码在我的本地开发环境中工作正常,但是当我将其推送到我们的开发服务器时,它始终返回false。确定用户是否在Active Directory组中

有什么我需要在IIS中配置?

注意:此代码仅在特定页面上运行。它没有在全球范围内用于所有网页。

Public Function IsInGroup(ByVal GroupName As String) 
    Dim MyIdentity As System.Security.Principal.WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent() 
    Dim MyPrincipal As System.Security.Principal.WindowsPrincipal = New System.Security.Principal.WindowsPrincipal(MyIdentity) 

    '' Web team needs access to all pages. See web.config for value. 
    If MyPrincipal.IsInRole(ConfigurationManager.AppSettings("ISSupportAllAccessADGRoup").ToString.ToUpper) Then 
     Return True 
    Else 
     If MyPrincipal.IsInRole(GroupName) Then 
      Return True 
     Else 
      Return False 
     End If 
    End If 

End Function 
+0

是为Windows身份验证设置的IIS服务器? –

+0

是的。 Windows身份验证已启用。 – crjunk

+0

做一些调试......在本地开发框中,Request.LogonUserIdentity.Name包含值“ABC \ john.doe”。在开发网站上,Request.LogonUserIdentity.Name包含值“NT AUTHORITY \ IUSR”。 – crjunk

回答

0

请参阅以下页面: http://msdn.microsoft.com/en-us/library/system.web.httprequest.logonuseridentity.aspx

Request.LogonUserIdentity.Name暴露Windows.Princpal。在任何情况下,这都要求: 1)启用Windows身份验证 2)启用了表单身份验证,并在此情况下将有效的域凭据传递给应用程序。

否则通过匿名访问就会破坏目的,并允许任何人以无身份代码呈现您的代码无意义。如果您需要识别用户的一部分功能,请考虑设置虚拟目录/管理员,例如,可以使用启用了Windows身份验证的自己的web.config。对于IIS(在服务器上),当没有其他可用的IUSR时,IUSR是默认的IIS帐户,并且我正在考虑ABC \ John Doe是您的工作站上的帐户。我会进一步说你在本地运行的IIS实例没有设置为匿名。

+0

我想出了一个不同的方式来获取用户的ID。有没有办法将它传递给校长?示例:Dim MyPrincipal As System.Security.Principal.WindowsPrincipal = New System.Security.Principal.WindowsPrincipal(“ABC \ john.doe”) – crjunk

+0

windpwsPrincipal的构造函数需要WindowsIdentity对象。 (这仍然需要目标是一个有效的Windows域\用户对和管理员访问,我推荐这个,你可以实现你自己的安全查找并避免使用windows.principal然而(用户名/散列密码存储在数据库为例。 –

相关问题