FormsAuthentication ASPXAUTH Cookie WCF和JSON

时间:2012-07-05 20:31:34

标签: jquery json wcf cookies formsauthentication

我有一个WCF Web服务,它公开函数来获取X信息。该服务以JSON格式返回信息。 如果我想保护此网络服务,我需要做什么?不使用默认的IIS安全性,我想使用自定义登录(使用数据库验证)。

我想要显示X信息的客户端应用程序可以进行JQUERY和AJAX调用。首先,我有一个登录页面,我可以输入用户名和密码(在MD5中加密)。客户端使用这些信息调用服务,如果用户有效(在postgresql数据库上进行简单选择)或者为false,则服务返回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

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

根据您的描述,我假设您使用IIS内的http绑定运行WCF服务。

如果在web.config中启用表单身份验证,ASP.NET引擎将负责读取auth cookie并设置处理请求的线程的标识。您不应该直接处理cookie。要检查用户是否已通过身份验证,请检查HttpContext.Current.User.Identity.IsAuthenticated属性。