在实现自定义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;
}
}
}
由于我无法理解的原因,我对此实施有两个问题:
filterContext.HttpContext.User.Identity.IsAuthenticated
始终为false
。因此,我总是重新运行我的自定义逻辑来验证用户。Authorize
),安全主体就会丢失"并重新显示"注册"和"登录"链接。我坚信我没有正确地坚持身份,但我无法找到正确的方法。有没有人有线索?
答案 0 :(得分:0)
您可能应该将您的主页的引用保存为cookie。或者您应该运行逻辑来检索每个请求的声明主体。
我不熟悉基于声明的身份,但无论如何
filterContext.HttpContext.User = principal;
filterContext.Principal = principal;
Thread.CurrentPrincipal = principal;
不足以在Web应用程序中保存自动化,因为一个请求存在过滤器上下文和http上下文。我不确定Thread,但对我而言,它不是在Web应用程序中存储主体的好地方。