Как установить Запрос. IsAuthenticated к истинному если не использование FormsAuthentication. RedirectFromLoginPage?

Я использую Идентификацию Формы и отправляю запрос Aajx к серверу для идентификации. На основе результата json клиент решает, куда пойти и что сделать. Это - причина, я не использую FormsAuthentication. RedirectFromLoginPage, чтобы не вмешаться ajax/json ответ.

В этом Запросе случая. Ложная прибыль IsAuthenticated, даже после утверждения пользователя с Членством. ValidateUser. Тогда я установил использование печенья

FormsAuthentication.SetAuthCookie(username, false);

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

Любая идея, как обратиться с Просьбой. IsAuthenticated работают, не используя FormsAuthentication. RedirectFromLoginPage?

26
задан Amin Emami 20 January 2010 в 22:21
поделиться

2 ответа

Вам необходимо обновить текущую руководитель безопасности по запросу. Когда вы звоните ответ. Redirect (...) Производится новый запрос, и директор Security Rinitialized и Preque.isauthentized возвращает True в вашем случае. FormandAuthentication.redirectromLoginPage Внутренние звонки Ответ. Перенаправить (...) . Вы можете вручную возобновить руководитель безопасности за текущий запрос, как это:

public void RenewCurrentUser()
{
    System.Web.HttpCookie authCookie =
        System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
    if (authCookie != null)
    {
        FormsAuthenticationTicket authTicket = null;
        authTicket = FormsAuthentication.Decrypt(authCookie.Value);

        if (authTicket != null && !authTicket.Expired)
        {
            FormsAuthenticationTicket newAuthTicket = authTicket;

            if (FormsAuthentication.SlidingExpiration)
            {
                newAuthTicket = FormsAuthentication.RenewTicketIfOld(authTicket);
            }
            string userData = newAuthTicket.UserData;
            string[] roles = userData.Split(',');

            System.Web.HttpContext.Current.User =
                new System.Security.Principal.GenericPrincipal(new FormsIdentity(newAuthTicket), roles);
        }
    }
}
24
ответ дан 28 November 2019 в 07:14
поделиться

Formandauthenticate.SetauthCookie

Метод создает аутентификацию билет на поставляемое имя пользователя и добавляет его в коллекцию файлов cookie ответ или к URL, если вы Использование аутентификации счеты.

Ref: MSDN

взглянует на поток управления аутентификацией . Cookie Authentication Cookie установлено в коллекцию Cookie Rescount, а также следует наблюдать на уровне протокола HTTP (например, используйте FireCookie или Fiddler2, чтобы проверить это).

Членство только проверяет имя пользователя / пароль. Ни членство, ни SetauthCookie () изменит текущий запрос. Они ожидают отправить печенье обратно в звонящий, а следующий запрос - это когда свойства, такие как , вернутся Isauthenticate .

Обратите внимание, что вы можете переопределить и расширять эти процессы процессов с использованием пользовательских IIDETITY и IPRINCIPIPAL и подключитесь к событиям аутентификации, если вам нужно.

также посмотрите на с использованием аутентификации форм с ASP.NET AJAX

20
ответ дан 28 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: