У меня есть приложение ASP.net core 3.1 MVC, использующее OpenID Connect с Identity Server 4. Я использую IdentityModel для автоматического обновления токенов доступа в своем приложении. Конфигурация выглядит следующим образом:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies", options =>
{
options.SlidingExpiration = false;
options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
})
.AddOpenIdConnect("oidc", options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("profile");
options.Scope.Add("api1");
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
options.SignedOutCallbackPath = "/oidc-signout";
options.SignedOutRedirectUri = "/goodbye";
});
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
services.AddHttpClient("api1", configure =>
{
configure.BaseAddress = new Uri("https://localhost:6001");
});
services.AddAccessTokenManagement();
У меня есть контроллер, который будет извлекать данные из нижестоящего API, защищенного с помощью этого сервера идентификации. Мой клиент MVC запрашивает область действия api1 и offline_access для получения токенов обновления. Эти токены хранятся в файле cookie, так как для служб установлено SaveTokens = true
.
Все работает нормально. Когда я вхожу в систему, я получаю токен доступа и токен обновления. У меня есть токен доступа, который длится около 20 минут, и когда он истекает, он вызывает конечную точку токена с токеном обновления, чтобы получить новый токен доступа + токен обновления.
Есть один сценарий, который я не знаю, как поступить, когда время жизни моего токена обновления истекло. Если я установлю время жизни токена обновления на 8 часов, но мой сеанс MVC все еще активен, он попытается получить новый токен обновления и потерпит неудачу.
Есть ли какое-то событие в промежуточном программном обеспечении OpenID connect, которое я могу обработать, которое обнаружит, когда ему не удастся получить этот токен обновления, и могу ли я использовать его, чтобы каким-то образом принудительно войти в систему (или, по крайней мере, туда и обратно на сервер идентификации/конечную точку авторизации? ) снова?