如何在请求之间保持IAUthenticationFilter结果

时间:2014-04-11 14:11:05

标签: asp.net-mvc authentication

在实现自定义IAuthenticationFilter时,我最终得到以下代码:

public class CustomAuthenticationAuthenticationFilter : ActionFilterAttribute, IAuthenticationFilter
{
    public void OnAuthentication(AuthenticationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            ClaimsPrincipal principal;

            // logic to retrieve the claims principal

            filterContext.HttpContext.User = principal;
            filterContext.Principal = principal;
            Thread.CurrentPrincipal = principal;
        }
    }
}

由于我无法理解的原因,我对此实施有两个问题:

  1. filterContext.HttpContext.User.Identity.IsAuthenticated始终为false。因此,我总是重新运行我的自定义逻辑来验证用户。
  2. 一旦我转到一个页面,其中一个控制器装饰了另一个身份验证操作过滤器属性(例如Authorize),安全主体就会丢失"并重新显示"注册"和"登录"链接。
  3. 我坚信我没有正确地坚持身份,但我无法找到正确的方法。有没有人有线索?

1 个答案:

答案 0 :(得分:0)

您可能应该将您的主页的引用保存为cookie。或者您应该运行逻辑来检索每个请求的声明主体。

我不熟悉基于声明的身份,但无论如何

filterContext.HttpContext.User = principal;
filterContext.Principal = principal;
Thread.CurrentPrincipal = principal;

不足以在Web应用程序中保存自动化,因为一个请求存在过滤器上下文和http上下文。我不确定Thread,但对我而言,它不是在Web应用程序中存储主体的好地方。

相关问题