Как справиться с истечением времени обновления токена - PullRequest
0 голосов
/ 27 декабря 2018

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

Мой вопрос: что произойдет, когда истечет токен обновления?Я попытался увидеть, что произойдет, установив AbsoluteRefreshTokenLifetime=15, но я просто получаю сообщение об ошибке, когда время истекает, т.е. когда я пытаюсь получить данные с сервера ресурсов.Я ожидаю перенаправления на страницу входа

Как правильно обрабатывать токен обновления с истекшим сроком действия?Если правильный способ заставить пользователя войти в систему, пожалуйста, предоставьте код, чтобы сделать это, поскольку ids4 не делает этого по умолчанию.Я не могу заставить его работать.

new Client
{
    ClientId = "mvc2",
    ClientName = "MVC Client2",
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,

    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    RedirectUris = { "http://localhost:5001/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5001/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "api1"
    },
    AllowOfflineAccess = true,
    RequireConsent = false,
    AccessTokenLifetime = 15,
    AbsoluteRefreshTokenLifetime = 15,
    IdentityTokenLifetime = 15
}

1 Ответ

0 голосов
/ 27 декабря 2018

Область действия токена обновления: offline_access .Это означает, что клиент может запросить токены доступа от имени пользователя без необходимости взаимодействия с пользователем.

В зависимости от потока, когда пользователь входит в систему, клиент получит тритокены: токен доступа, токен идентификации и токен обновления.

Будучи автоматизированным (автономным) процессом, страница входа отсутствует.Активного пользователя нет, поэтому возврат просто неавторизован.Это означает, что после истечения срока действия пользователь должен снова войти в систему, чтобы снова запустить процесс .

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

Используя конфигурацию IdentityServer, у вас есть несколько вариантов.Вы можете выбрать скользящий срок действия, то есть токен обновления «никогда не истекает».И вы можете установить его только на одноразовое использование.

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

С точки зрения срока службы:

access token < refresh token <= AbsoluteRefreshTokenLifetime.

Просто убедитесь, что токен обновленияне истекает и не теряется.

Если у вас есть сценарий, в котором токен обновления был потерян или истек, выйдите из системы.Перейдите на защищенную страницу, которая будет перенаправлять пользователя на страницу входа.

Это зависит от вашей конфигурации, но вы можете сделать что-то подобное для выхода из системы:

await HttpContext.SignOutAsync("Cookies");
return LocalRedirect($"/secured");

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

Если вы хотите полный выход из системы (все веб-сайты):

await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");
...