Я следовал документам Okta для проверки подлинности Owin OpenId с использованием файлов cookie в приложении MVC (.Net Framework).
Чтобы помочь мне проверить некоторую логику вокруг вопроса «что происходит, когда истекает сеанс пользователя», я установил срок действия cookie на 30 секунд и установил SlidingExpiration = false - например, так:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
LoginPath = new PathString("/v2/account/Login"),
ExpireTimeSpan = TimeSpan.FromSeconds(30),
SlidingExpiration = false
});
app.UseOktaMvc(new OktaMvcOptions()
{
OktaDomain = ConfigurationManager.AppSettings["okta:OktaDomain"],
ClientId = ConfigurationManager.AppSettings["okta:ClientId"],
ClientSecret = ConfigurationManager.AppSettings["okta:ClientSecret"],
RedirectUri = ConfigurationManager.AppSettings["okta:RedirectUri"],
PostLogoutRedirectUri = ConfigurationManager.AppSettings["okta:PostLogoutRedirectUri"],
Scope = new List<string> { "openid", "profile", "email" },
});
... код отлично работает для входа в систему и аутентификации, а также для входа в okta, и все - так просто! К сожалению, пользователь не вышел из системы через 30 секунд.
Если я смотрю запрос после входа в систему и проверяю Identity.Claims, я вижу истечение срока действия (тип заявки "exp" ). Заявка действительно установлена на дату / время. 30 секунд с момента регистрации.
Проблема в том, что пользователь остается аутентифицированным. Я могу продолжать делать запросы до тех пор, пока не истечет это время. Я не вижу истечения срока действия изменения претензии и вижу аутентифицированного пользователя в удостоверении личности. Я не уверен, сколько бездействия, пока этого пользователя не попросят войти снова. (помните, что для параметра slide задано значение false, и фоновые вызовы ajax не выполняются).
Мне также пришло в голову, что промежуточное ПО Okta может увидеть истечение срока действия заявки, а затем использовать оригинальный токен, напримеробновление, и если пользователь все еще вошел в okta, то оставьте пользователя вошедшим в мое приложение (что было бы действительно здорово!) - но, наблюдая за работой моей dev-машины с fiddler, я не вижу никаких вызовов oktaБыть сделанным.
Может кто-нибудь объяснить, почему это произойдет и когда истечет срок действия претензии?