2013-01-15 46 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然而(用戶名/散列密碼存儲在數據庫爲例。 –

相關問題