Когда сеанс должен истечь в Identity Server 4 с клиентом MVC? - PullRequest
0 голосов
/ 20 ноября 2018

Я использую клиент 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;
    };
}) 

1 Ответ

0 голосов
/ 20 ноября 2018

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

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

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

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

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

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

...