Служба маркеров безопасности 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 ответа:
Прочитав предложение от @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" />