Войдите в систему вручную с помощью проверки подлинности с помощью форм - PullRequest
0 голосов
/ 15 декабря 2010

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

1 Ответ

0 голосов
/ 15 декабря 2010

После вызова SetAuthCookie ничего не меняется с User.Identity.По следующему запросу, данные будут тем, что вы ожидаете.Лучше всего сделать переадресацию после вызова SetAuthCookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...