asp.net-core - 重新启动 IdentityServer4 时,客户端应用程序 (oidc) 被重定向到登录
问题描述
我有一个 IdentityServer 的实现,它带有一个用于验证的外部提供程序和一个使用 oidc-client 库实现 oidc 隐式流的客户端应用程序。在 IdentityServer 关闭(例如由于不活动)之前,一切正常(登录、注销、刷新令牌、ecc...)。
当 IdentityServer 重新启动时,如果会话/令牌仍然有效,我的客户端也会被重定向到登录。我尝试使用 OperationalStore 或 InMemoryPersistedGrants,但是在重新启动服务且不关闭浏览器后,我的行为始终相同。就像任何会话/令牌存储在启用了 OperationalStore 的数据库中一样。相反,cookie 由浏览器会话正确保存,并允许在重新启动后浏览 IdentityServer 页面而不要求登录。
服务重启后重定向到登录的 API 调用(来自客户端)是这样的:IdS-server/connect/authorize?client_id=client-id&redirect_uri=redirectUri&response_type=code&scope=scopes&state=state&code_challenge=codeChallenge &code_challenge_method=S256&response_mode=query
我的 IdentityServer 中是否有一些缺失或错误的配置?
//
// IdentityServerBuilder
//
identityServerBuilder = services.AddIdentityServer();
// this adds the operational data from DB (codes, tokens, consents)
identityServerBuilder.AddOperationalStore(options =>
{
options.ConfigureDbContext = builder =>
builder.UseSqlServer(connectionString,
sql => sql.MigrationsAssembly(migrationsAssembly));
// this enables automatic token cleanup. this is optional.
options.EnableTokenCleanup = true;
options.TokenCleanupInterval = 30;
});
identityServerBuilder.AddInMemoryIdentityResources(identityServerService.GetIdentityResources())
.AddInMemoryApiScopes(identityServerService.GetApiScopes())
.AddInMemoryApiResources(identityServerService.GetApiResources())
.AddInMemoryClients(identityServerService.GetClients());
identityServerBuilder.AddTestUsers(identityServerService.GetUsers().ToTestUsers().ToList());
identityServerBuilder.AddDeveloperSigningCredential();
//
// AuthenticationBuilder
//
var cookieScheme = identityServerConfig.GetCookieSchemeOrDefault();
if (identityServerConfig.IsCookieSchemeCustom())
{
authenticationBuilder = services.AddAuthentication(cookieScheme).AddCookie(cookieScheme, options =>
{
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
});
}
else
{
authenticationBuilder = services.AddAuthentication().AddCookie(options =>
{
options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
});
}
解决方案
推荐阅读
- python - 在python中将数字e + xx缩放为e + 00
- drools - Drools 规则引擎:是否可以将参数设置为列表,然后为决策表中列表中的每个值运行条件?
- geoip - 在 mautic 中上传 GeoLite2-City.mmdb.missing 文件的问题
- sql - 如何通过VIEW删除?
- pip - python3.7 mac 安装 spacy 的问题
- node.js - Node.js - Firebase-admin 在安装时失败
- c - 为什么这会给我一个系统上的分段错误而不是另一个系统?
- sql-server - 违反 PRIMARY KEY 约束。无法在对象中插入重复键 - SQL Server - 简单表
- audio - 如何更改 SoX 的录音设备?
- flutter - 为什么这两种为 onPressed 指定回调的方式有效?