我有一個WCF Web服務,公開函數來獲取X信息。該服務以JSON格式返回信息。 如果我想要保護此Web服務,我需要做什麼?不使用默認的IIS安全性,我想使用自定義登錄(使用數據庫驗證)。FormsAuthentication ASPXAUTH Cookie WCF和JSON
我想從中顯示X信息的客戶端應用程序使JQUERY和AJAX調用。首先,我有一個登錄頁面,可以輸入用戶名和密碼(在MD5中加密)。客戶使用這些信息調用服務,如果用戶有效(簡單地在postgresql數據庫上選擇)或服務返回YES,服務返回YES。目前,我啓動一個FormsAuthentication對象並將其添加到cookie中。
Private Function SetAuthCookie(name As String, rememberMe As Boolean, userData As String) As Integer
' In order to pickup the settings from config, we create a default cookie and use its values to create a new one.
Dim cookie As HttpCookie = FormsAuthentication.GetAuthCookie(name, rememberMe)
Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(cookie.Value)
Dim newTicket As New FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData, ticket.CookiePath)
Dim encTicket As String = FormsAuthentication.Encrypt(newTicket)
' Use existing cookie. Could create new one but would have to copy settings over...
cookie.Value = encTicket
HttpContext.Current.Response.Cookies.Add(cookie)
Return encTicket.Length
End Function
其次,我看到,當我從客戶端代碼做呼叫,.ASPXAUTH的cookie被傳遞每個調用。 但是,我需要在服務器端做什麼來驗證這是一個好用戶而不是一個「被盜」的cookie的ASPXAUTH代碼?我不認爲這個小的isValidUser函數足以有效地調用。
Private Function isValidUser() As Boolean
Dim cookie As HttpCookie = HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName)
If cookie Is Nothing Then Return False
Dim decrypted = FormsAuthentication.Decrypt(cookie.Value)
If String.IsNullOrEmpty(decrypted.UserData) Then Return False
Return True
End Function
最好的問候,
Anders, 我使用IIS的webHttpBinding。當我查看用戶標識時,在本地主機上我有Windows認證用戶,但是當我將Web服務發佈到另一臺服務器時,該屬性爲空。無論如何,我不需要Windows Authenticated用戶,我需要使用存儲在postgres數據庫中的用戶名和密碼對我進行身份驗證。 感謝您的幫助。 – 2012-07-06 13:53:51