Служба маркеров безопасности Windows Identity Foundation не может оставаться в системе - PullRequest
3 голосов
/ 27 августа 2010

Я использую Windows Identity Foundation (WIF) Служба маркеров безопасности (STS) для обработки проверки подлинности моего приложения, которая работает хорошо. Тем не менее, я не могу получить длительный вход в систему с STS.

Насколько я понимаю, мне не нужно заботиться о клиентских токенах на уровне приложения, так как они могут истечь все, что хотят, и это должно перенаправить меня на STS, и пока они все еще подключены к STS, это должно обновить токен приложения. И все же, похоже, он не хочет держать их в системе.

Вот что происходит в моем login.aspx на STS

var cookie = FormsAuthentication.GetAuthCookie(userName, persistTicket);

if (persistTicket)
    cookie.Expires = DateTime.Now.AddDays(14);

Response.Cookies.Add(cookie);

var returnUrl = Request.QueryString["ReturnUrl"];
Response.Redirect(returnUrl ?? "default.aspx");

Который был взят почти напрямую из существующего приложения с использованием обычной проверки подлинности форм.

Из моего web.config

<authentication mode="Forms">
      <forms loginUrl="Login.aspx" protection="All" timeout="2880" 
      name=".STS" path="/" requireSSL="false" slidingExpiration="true" 
      defaultUrl="default.aspx" cookieless="UseDeviceProfile" 
      enableCrossAppRedirects="false" />
</authentication>

Глядя на cookie-файл после того, как я войду в систему, я вижу, что время истечения срока действия cookie-файла установлено на 14 дней в будущем, и что cookie-файл является НЕ сессионным cookie-файлом.

Когда мне необходимо снова войти в STS, я вижу, что мой оригинальный файл cookie все еще там.

Есть ли какая-то функция отметки времени, которую STS встраивает в файл cookie, который делает недействительным мой файл cookie, хотя, насколько я знаю, он все еще должен быть действительным?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2010

После прочтения предложения @uosel это привело меня к более глубокому анализу того, что именно здесь происходит. Принимая во внимание, что моя цель состоит в том, чтобы создать постоянный файл cookie только для самой службы STS, а не для сайтов, использующих службу STS. Таким образом, я всегда могу проверить пользователя на уровне STS при любом истечении срока использования сайта STS.

С большей подвижностью в этой цепочке мыслей меня осенило, что начальный сайт STS использует формы auth для обеспечения фактической авторизации WIF, которая происходит в index.aspx. Проблема была в том, что у меня не было логики, которая использовала бы существующий билет проверки подлинности форм для обработки перехода на защищенную индексную страницу проверки подлинности форм.

Это привело меня к решению, аналогичному

if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}
1 голос
/ 01 сентября 2010

Если вы используете пассивные перенаправления, есть ли у persistentCookiesOnPassiveRedirects значение true?

<wsFederation passiveRedirectEnabled="true"
    persistentCookiesOnPassiveRedirects="true" />
...