AJAX请求WCF服务身份验证

时间:2014-03-28 12:07:25

标签: jquery asp.net ajax wcf cookies

如果有人能帮助我,我会感激不尽。目前,我正在ASP.NET应用程序上实现一些jQuery AJAX方法,以便将GET和POST数据传输到我们的服务器。我们希望在此基础上使用某种形式的身份验证,它是轻量级的,并且实现起来相当快。

目前,每个AJAX请求都会将表单身份验证cookie发送到我们的WCF服务,如Fiddler所示。当我们收到对WCF服务的请求时,它有一个解密Forms Authentication cookie的方法。目前,如果cookie不为空且未过期,它将仅提供数据响应。这很好用,并且cookie存在的唯一方法是用户是否通过了我们的安全登录系统。

我想知道的是,这是否是确保我们的AJAX呼叫安全的有效形式。

模仿表格饼干容易吗?是否有可能规避表单cookie?任何建议都会受到赞赏,因为我在这里有点深入。

编辑:我们目前还启用了SSL和安全HTTPS传输。

以下是我们代码的示例:

private bool AuthenticateAJAXRequest()
{
    // assume user is not authenticated
    bool authenticated = false;
    if (HttpContext.Current != null)
    {
        if (HttpContext.Current.Request != null)
        {
            var authCookie = HttpContext.Current.Request.Cookies["authCookie"];
            if (authCookie != null)
            {
                FormsAuthenticationTicket fTicket = FormsAuthentication.Decrypt(authCookie.Value);
                if (fTicket != null)
                {
                    if (!fTicket.Expired)
                        authenticated = true;
                }
            }
        }
    }
    return authenticated;
}

1 个答案:

答案 0 :(得分:1)

首先,AJAX(XHR - Xml Http Request)异步请求受“Same-Origin”策略的约束。这意味着浏览器将隐式拒绝/限制对除页面源之外的服务器进行AJAX调用。 这会处理跨域脚本攻击。 (您仍然可以使用JSONp或手动使用脚本标记进行跨域异步调用,但这不是当前讨论范围内的其他球类游戏。) 从我收集的内容来看,如果您只是检查cookie并且没有退回,那么您将遇到麻烦,因为一些用户可能已经在他们的浏览器中关闭了cookie。相反,我建议使用可以为每个用户会话存储和检索的用户级别唯一ID。将此唯一ID作为每个Ajax请求的一部分发送,并根据服务器上的数据存储(缓存或持久)对其进行验证。这样您就可以放心,无论使用哪种cookie,该系统仍然可以正常工作。还要确保在用户注销后销毁唯一ID,以便不再遵守任何将来的请求(整页或Ajax)。 希望这能回答你的问题。