我正在尝试为Asp.Net MVC2应用程序实现基于令牌的授权,我认为我的方法是错误的。首先:基于令牌的授权我的意思是当未经身份验证的用户转到http://myapp.com/some/action?tok=[special single-use token here]
时,他们会登录。
我的应用中的所有控制器都扩展了一个公共ApplicationController
,因此我的方法是覆盖该控制器上的OnAuthorize
,如下所示:
class ApplicationController
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.QueryString["tok"] != null)
{
var token = HttpUtility.UrlDecode(filterContext.HttpContext.Request.QueryString["tok"]);
if ((var user = getUserByToken(token)) != null)
{
FormsAuthentication.SetAuthCookie(user.Email, false);
}
else{ /* highly-proprietary handling of invalid token */ }
}
base.OnAuthorization(filterContext);
}
}
我绝对肯定 SetAuthCookie
在应该被调用时被调用,而不被调用。
问题是,这并没有真正记录用户。它设置了一个cookie,这意味着我必须重定向(User.Identity.IsAuthenticated
在调用SetAuthCookie
后仍然是假的。)但是整个关于这个的想法是正常地继续请求并避免无意义的重定向。有没有办法实现这个目标?看起来真的不是很多......
答案 0 :(得分:0)
调用SetAuthCookie后,User.Identity没有任何变化。在下一个请求中,数据将是您所期望的。这里最好的办法是在调用SetAuthCookie后发出重定向。