扩展表单身份验证以使用自定义http标头作为故障单

时间:2012-04-05 03:20:24

标签: asp.net forms-authentication webhttp

我有一个wcf webhttp服务,它使用表单身份验证来验证用户。如果票证来自cookie集合或URL,则此方法可以正常工作。

但是现在我想在自定义http标头中发送表单auth标签的字符串,并更改表单auth模块以检查该标头而不是cookie。

我认为将表单auth扩展到实现这一点应该很容易,但找不到任何有关如何使用的资源。你能指出我正确的方向吗?

这是我的身份验证流程如何运作,

  1. 客户端使用用户名和pwd
  2. 调用authenticate方法
  3. 服务返回加密的票证字符串
  4. 客户端在每个后续请求的http标头中发送收到的票证字符串
  5. 服务检查auth标头并验证身份验证票据

2 个答案:

答案 0 :(得分:3)

FormAuthentication模块不可扩展,但您可以编写自己的身份验证。 这很简单:

认证(2):


var formsTicket = new FormsAuthenticationTicket(
    1, login, DateTime.Now, DateTime.Now.AddYears(1), persistent, String.Empty);
var encryptedFormsTicket = FormsAuthentication.Encrypt(formsTicket);
//return encryptedFormsTicket string to client

附加票证的服务电话(4):


var ticket = FormsAuthentication.Decrypt(encryptedFormsTicket)
//extract authentication info from ticket: ticket.Name

答案 1 :(得分:1)

我不确定这是怎么回事(优雅),但是如果在global.asax.cs中为Application BeginRequest添加一个事件并从头部获取字符串并自己将一个cookie注入Request中(然后表单身份验证应该选择它。

类似的东西:


protected void Application_BeginRequest()
{
    // Your code here to read request header into cookieText variable
    string cookieText = ReadCookieFromHeader();

    var cookieData = FormsAuthentication.Decrypt(cookieText);

    if (!cookieData.Expired)
    {
        HttpContext.Current.Request.Cookies.Add(new HttpCookie(cookieData.Name, cookieText));
    }
}

免责声明:请注意,我没有对此进行测试,只是按照您的方式进行测试!