Гибридный поток Identity Server (OpenID Connect): необходимо, чтобы пользователь оставался в системе в течение 5 лет с помощью маркеров обновления - PullRequest
0 голосов
/ 30 октября 2018

Я использую OpenID Connect Identity Server 3 для создания Гибридного клиента , который будет иметь долговременный доступ (разрешение пользователям оставаться в системе в течение 5 лет без необходимости вводить свои учетные данные)

Я определил клиент хранилища конфигурации In-Memory следующим образом:

new Client
{
    Enabled = true,
    ClientId = MyClientApp.Id,
    ClientUri = MyClientApp.Uri,
    ClientName = MyClientApp.Name,
    Flow = Flows.Hybrid,
    AllowAccessToAllScopes = true,
    IdentityTokenLifetime = 300,
    AccessTokenLifetime = 3600,
    RefreshTokenExpiration = TokenExpiration.Absolute,
    AbsoluteRefreshTokenLifetime = (int)TimeSpan.FromDays(1825).TotalSeconds,
    RefreshTokenUsage = TokenUsage.OneTimeOnly,
    UpdateAccessTokenClaimsOnRefresh = true,
    RequireConsent = false,
    RedirectUris = new List<string>
    {
        MyClientApp.Uri
    },
    PostLogoutRedirectUris = new List<string>
    {
        MyClientApp.Uri
    },
    ClientSecrets = new List<Secret>
    {
        new Secret(MyClientApp.Secret.Sha256())
    }
},

Где:

MyClientApp.Id = test.client
MyClientApp.Uri = https://testclient.trx.com
MyClientApp.Name = My Test Client

Срок действия токена истекает через 3600 секунд (1 час)

Срок действия Identity Token истекает через 300 секунд (5 минут),

Срок действия Refresh Token (Absolute) истекает через 5 лет

Это правильный способ определения Клиента, который отвечает моим требованиям?

Requirements:

User Signs in (authenticates) one time

User will remain signed in without the session expiring in 5 years

User will need to enter their credentials again after 5 years

Буду признателен за любую помощь

Спасибо

1 Ответ

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

Так что, глядя на это, похоже, что IdentityServer3 является правильной настройкой для получения результатов, которые вы ищете.

в IS4 вы бы AllowOfflineScope и установили GrantType - в IS3 это те Flow и AllowAccessToAllScopes, которые вы установили, время жизни выглядит нормально - должно разрешать новый токен доступа раз в час и токен обновления будет делать это в течение 5 лет.

Edit: С дополнительной информацией об использовании AngularJS в SPA это меняет положение вещей, до версии 4.3 Angular кажется, что токены обновления не поддерживаются, после 4.3 вы можете использовать HttpInterceptor для использования токенов обновления.

В отношении Flow клиента SPA может использовать только тип Implicit.

.

Использование oidc-token-manager и автоматическое обновление:

Как вы упомянули, при использовании oidc-token-manager одним из вариантов будет использование функции Silent renew и настройка ExpireTimeSpan из CookieOptions в IdentityServer - это позволяет одностраничному приложению автоматически обновлять сеанс на основе файла cookie. на клиенте - единственным недостатком является, конечно, если клиент очистит свои куки, ему потребуется повторный вход в систему.

Часть 3 этого учебника по IdentityServer содержит подробные сведения о настройке тихого обновления, и все, что требуется, это продлить срок службы файлов cookie.

.

Использование HttpInterceptors с токенами обновления:

Также упомянутый HttpInterceptor, который поддерживается в 4.3+ AngularJS, - это то, что у меня нет опыта использования - хотя есть много руководств по реализации токенов обновления с его помощью Как в этом примере .

...