以下是我們當前的設置。我們配置了Active Directory(域名爲mis1),用於處理我們所有的身份驗證問題。我們爲impersonation = true設置了Web應用程序設置,以便我們可以在用戶登錄時調用我們的數據庫查詢。對於此特定應用程序,IIS設置爲匿名訪問,我們可以使用表單身份驗證。如何使用WindowsIdentity和SQL Server集成安全性設置表單身份驗證
對於我們的數據庫的安全,我們必須在數據庫服務器上本地組的設置,並將用戶添加到需要每個應用這些羣體。例如,我們將爲同一個FancyPants應用程序創建一個「FancyPantsManager」組和一個「FancyPantsUser」組。然後我們設置SQL Server 2005登錄來映射到服務器上的這些本地組。
我想要做的是爲AD認證的用戶提供一個登錄頁面,然後如果成功,請去數據庫服務器獲取他們的角色(通過調用xp_logininfo)存儲在用戶的會話中。
到目前爲止,我有窗體身份驗證通過做的P/Invoke從avapi32.dll文件中的LogonUser方法成功驗證過的Active Directory。然後我得到結果令牌並生成一個WindowsIdentity對象並冒充用戶。代碼如下所示:
Private Sub loginMain_Authenticate _
(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) _
Handles loginMain2.Authenticate
' Assume variables properly declared
IsAuthenticated = LogonUser(UserName, LOGON_DOMAIN, UserPass,
LOGON_TYPE, LOGON_PROVIDER, ResultToken)
If IsAuthenticated
' Setup impersonation for validated user.
WindowsId = New WindowsIdentity(ResultToken)
IdentContext = WindowsId.Impersonate()
' Call stored procedure to retrieve roles using validated user for login.
GetUserRoles(UserName)
End If
End Sub
當我通過調試器並輸入我的正確ID和密碼。我通過身份驗證,並查看生成的WindowsIdentity對象,它指出我的Id是「mis1 \ c07884」,這正是模擬到達SQL Server所需的內容。然而,當方法getRoles被調用時,我得到了以下錯誤消息:
System.Data.SqlClient.SqlException: Could not obtain information
about Windows NT group/user 'c07884', error code 0xffff0002.
在我看來,有些事情是不能與模擬過程中進行適當的發生。我錯過了什麼?
Nah!...我想這不是你想要的,是嗎? – 2009-09-24 19:32:24
關閉,但我需要一個授權令牌,以便我可以連接到數據庫,並保存用戶網絡會話的部分票據。 – 2009-09-24 19:34:35