【发布时间】:2016-03-21 10:40:27
【问题描述】:
我在一个项目中实现了表单身份验证。在表单身份验证 cookie 中,我存储了用户的登录 ID。即
FormsAuthentication.SetAuthCookie(LoginId, false);
我现在需要读取每个请求的 cookie 值以获取有关用户的更多信息并将这些信息放入 HttpContext.Items 属性中。该项目是一个 MVC 项目,它既有常规的 MVC 控制器,也有 Web API 控制器。目前我已经创建了两个动作过滤器——一个用于 MVC 控制器,另一个用于我读取此值的 Web API 控制器。很喜欢
public class MyMvcFilter : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var ticket = FormsAuthentication.Decrypt(cookie.Value);
filterContext.HttpContext.Items.Add("LoginId",ticket.Name);
}
base.OnAuthorization(filterContext);
}
}
和
public class MyFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null)
{
return;
}
var ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket == null)
{
return;
}
actionContext.Request.Properties.Add("LoginId", userId);
}
}
但是我越想它,它对我来说就越像一个丑陋的黑客。我可以解密身份验证 cookie 并且对于 MVC 控制器和 Web API 控制器保持不变的正确位置是什么?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api forms-authentication