6

我有一个 wcf webhttp 服务,它使用表单身份验证来对用户进行身份验证。如果票在 cookie 集合或 url 中,这很好用。

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

我认为扩展表单身份验证来实现这一点应该很容易,但找不到任何资源。你能为我指出正确的方向吗 ?

这是我的身份验证流程的工作方式,

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

2 回答 2

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
于 2012-05-10T03:57:48.493 回答
2

我不确定这是要走的路(优雅方面),但是如何在 global.asax.cs 中为 Application BeginRequest 添加一个事件并从标头中获取字符串并自己将 cookie 注入请求中(表单身份验证应该然后拿起它)。

就像是:


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));
    }
}

免责声明:请注意,我没有对此进行测试,只是以您的方式提出一种可能的方法!

于 2012-05-07T14:31:33.570 回答