Я пытаюсь реализовать авторизацию на основе токенов для приложения 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
.) Но вся идеяпо этому поводу следует продолжить запрос как обычно и избежать бессмысленного перенаправления.Есть ли способ достичь этой цели?На самом деле, спрашивать не так уж много ...