Служба маркеров безопасности Windows Identity Foundation не может оставаться в системе


Я использую Windows Identity Foundation (WIF) Security Token Service (STS) для обработки аутентификации для моего приложения, которое работает хорошо и хорошо. Однако я не могу, кажется, получить какой-либо длительный логин с STS.

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

Вот что происходит в моем логине.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");

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

Из моей паутины.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, которая делает недействительным мой файл cookie, хотя, насколько я знаю, он все еще должен быть действительным?

2 3

2 ответа:

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

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

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

if(User.Identity.IsAuthenticated)
{    
    if(IsValidUserCredentials())
    {
       var returnUrl = Request.QueryString["ReturnUrl"];
       Response.Redirect(returnUrl ?? "default.aspx");
    }    
}
else
{
    DisplayLoginForm()
}

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

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