Когда сеанс должен истечь в Identity Server 4 с клиентом MVC?

Я использую клиент MVC с IdentityServer3.AccessTokenValidation и Identity Server 4 в качестве своего приложения IDP.

Я добавил время ожидания файла cookie в следующих местах, однако кажется, что срок действия сеанса никогда не истекает, и пользователь не автоматически выходит из системы -

В клиенте MVC -

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies",
    ExpireTimeSpan = new TimeSpan(0, 20, 0, 0)
});

Если я устанавливаю время менее 20 часов, запрос на авторизацию выполняется в бесконечном цикле.

В приложении IDP

services.AddIdentityServer(
    opt => new IdentityServer4.Configuration.IdentityServerOptions
    {
        Authentication = new IdentityServer4.Configuration.AuthenticationOptions()
        {
            CookieLifetime = TimeSpan.FromSeconds(60)
        }
    }

В приложении IDP

.AddCookie("Cookies", opt => {
    opt.ExpireTimeSpan = TimeSpan.FromSeconds(60);
    opt.Cookie = new CookieBuilder() { Expiration = new TimeSpan(0,0,0,60) };
    opt.Events.OnSigningIn = (context) =>
    {
        context.CookieOptions.Expires = DateTimeOffset.UtcNow.AddSeconds(60);
        return Task.CompletedTask;
    };
}) 

person ravneet singh    schedule 19.11.2018    source источник
comment
Как сейчас происходит аутентификация на клиенте?   -  person mackie    schedule 20.11.2018
comment
@ravneet Я также застрял в реализации тайм-аута сеанса. Это просто не работает для меня. Я не знаю почему.   -  person prisar    schedule 20.11.2018


Ответы (1)


Это моя интерпретация общего подхода к этому:

Цель OIDC (через спецификацию управления сеансом) состоит в том, что сеанс IDP становится «главным», и поэтому, когда вы выходите из него, все сеансы вашего клиентского приложения также должны завершаться (через выход из системы переднего или заднего канала и мониторинг сеанса на стороне клиента механизм).

Это не мешает клиентским приложениям иметь свои собственные правила относительно того, как часто пользователь должен проходить интерактивную аутентификацию или какие методы должны использоваться. Чтобы управлять этим с клиента, вы можете использовать параметры конечной точки авторизации prompt и max_age и последующую проверку утверждения auth_time в возвращаемом id_token.

В этой настройке, на мой взгляд, имеет смысл иметь постоянный файл cookie для IDP, который довольно долго живет (и обновляется всякий раз, когда пользователь аутентифицируется в интерактивном режиме), и файл cookie сеанса (т.е. удаляется при закрытии браузера) в клиентском приложении.

Чтобы все это работало, вы должны использовать признанный тип гранта — обычно гибридный для серверного приложения — поскольку только тогда у вас есть доступ к данным и функциям, которые позволяют это делать.

Проверьте эти характеристики:

person mackie    schedule 20.11.2018
comment
Я использую неявный поток в клиентском приложении MVC, использование истечения срока действия файлов cookie дает мне скользящую функциональность. Я фактически реализовал этот подход, установив срок действия. Мой вопрос по-прежнему заключается в том, как лучше всего это сделать с помощью файлов cookie или как можно выполнить последующую проверку? Я использовал сердцебиение сеанса, но это заставляет мое клиентское приложение никогда не истекать сеансом. - person ravneet singh; 22.11.2018