【发布时间】:2012-10-21 15:49:20
【问题描述】:
我正在调用一项服务,并且我需要在我发出的每个请求中传递用户的永久安全令牌。
为了做到这一点,我已将此方法添加到我的基本控制器类中:
protected UserData getUsr()
{
try
{
UserData usr = new UserData();
usr.SecurityToken = Session["secToken"].ToString();
MembershipUser mvcUser = Membership.GetUser(HttpContext.User.Identity.Name);
usr.Id = (int)mvcUser.ProviderUserKey;
return usr;
}
catch (Exception ex)
{
log.Debug("Could not create usr object", ex);
throw new Exception("Could not authenticate");
}
}
这里的问题是,有时 User.Identity 数据比会话数据更持久,导致用户看到他们已登录但随后他们的请求失败时发生奇怪的错误。
有没有更好的方法来存储这个令牌/我可以以这样的方式存储它,只要 User.Identity 对象过期,它就会过期吗?
另外,如果有人知道一些关于 HttpContext 和 MVC 授权过滤器的基本理解示例/文档,那就太好了。
【问题讨论】:
-
您可以简单地检查其中一个值、令牌或 User.Identity 数据是否不再有效。然后用户需要重新登录
-
是的,但这需要在 MVC 检查授权过滤器的任何地方进行,否则他们可以访问一个页面,并花费 10 分钟填写一个表单,但由于其令牌已过期而被拒绝。
-
我查看了其他一些问题,重写 MVC onauthorize 方法非常有效。虽然它并没有完全解决问题,所以我将搜索 onauthenticate 方法(无论是什么),看看我是否可以覆盖它。
标签: asp.net-mvc session authentication asp.net-membership