У меня проблема с таймаутами и Identityserver.В настоящее время у меня есть клиент веб-форм, авторизованный через Identityserver, который выдает cookie.После 10 минут бездействия этот файл cookie истекает, и пользователь направляется в конечную точку аутентификации и автоматически повторно авторизуется с идентификацией.Можно ли обойти этот шаг повторной авторизации и автоматически выйти из системы?В противном случае, это еще один способ, которым пользователь может быть вынужден перейти на страницу входа в личность.В идеале я бы не хотел, чтобы другие клиенты, авторизованные через тот же сервер идентификации, имели это правило десяти минут ожидания.Моя текущая настройка выглядит следующим образом:
Запуск клиента:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType("Cookies");
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies",
ExpireTimeSpan = TimeSpan.FromMinutes(10),
SlidingExpiration = true
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
AuthenticationType = "oidc",
Authority = "IdentityUrl",
ClientId = "ClientId",
ClientSecret = "ClientSecret",
RedirectUri = "RedirectUri",
ResponseType = "code id_token",
Scope = "scopes",
PostLogoutRedirectUri = "PostLogoutRedirectUri",
RequireHttpsMetadata = true,
UseTokenLifetime = false,
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = context =>
{
if (context.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
context.ProtocolMessage.IdTokenHint = context.OwinContext.Authentication
.User.FindFirst(Constants.ResponseTypes.IdToken)?.Value;
return Task.FromResult(0);
},
SecurityTokenValidated = n =>
{
var id = n.AuthenticationTicket.Identity;
id.AddClaim(new Claim(Constants.ResponseTypes.IdToken, n.ProtocolMessage.IdToken));
n.AuthenticationTicket = new AuthenticationTicket(id, n.AuthenticationTicket.Properties);
return Task.FromResult(0);
}
}
});
app.UseStageMarker(PipelineStage.Authenticate);
}
}
Default.aspx
public partial class _Default : HSTPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (Context.Request.IsAuthenticated) Response.Redirect("HomePageUrl");
else
{
HttpContext.Current.GetOwinContext().Authentication.Challenge(new AuthenticationProperties
{
RedirectUri = "CallBackUrl"
});
}
}
}
и, наконец, конфигурация сервера идентификации
var idpAssemblyName = GetAssemblyName<Startup>();
services.AddIdentityServer()
.AddSigningCredential(LoadCertificateFromStore(_configuration))
.AddConfigurationStore(storeOptions => storeOptions.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, options => options.MigrationsAssembly(idpAssemblyName)))
.AddOperationalStore(storeOptions => storeOptions.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, options => options.MigrationsAssembly(idpAssemblyName)))
.AddAspNetIdentity<IdentityUser>();