现在,我已经为此苦苦挣扎了好几个星期,而我根本找不到答案。
我已经将Identity Server 4设置为Okta的中介,以作为几个Angular应用程序的ID提供程序。为此目的,它工作得很好。除此之外,无论我尝试更改什么,在30分钟后,无提示刷新都会报告“需要登录”。并尽可能搜索Google,我似乎根本无法弄清楚如何使该会话保持有效。或者我可能是盲人,想念它。看起来很简单-延长会话时间-但是我遇到障碍,却无法做到这一点。
我的设置:
services.AddAuthentication(options =>
{
options.DefaultSignInScheme = "oidc";
})
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.SignOutScheme = IdentityServerConstants.SignoutScheme;
options.GetClaimsFromUserInfoEndpoint = true;
options.UseTokenLifetime = true;
options.Authority = Configuration["Authority"];
options.ClientId = Configuration["OktaAppId"];
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role", SaveSigninToken = true
};
});
这个SO问题似乎相关,但它来自2017年,没有明显的解决方案,或者是:Session Timeout when using IdentityServer4 and Oidc client causing Silent Renew to stop working
我的无提示刷新代码正在运行-每次调用我都获得新令牌。但是,在30分钟之后,对授权端点的调用结束,这将终止似乎是授权会话cookie的idsrv.session cookie。我发现用于扩展会话的解决方案似乎与不使用OIDC的登录有关,因此,会话扩展似乎不适用于我的情况(至少,需要更改的属性不存在) OIDC选项对象)。
另一个有趣的,也许是相关的细节...看来,当击中了授权端点时,使用提示=无进行静默刷新时,没有重定向到Okta。我不确定这是否很重要,还是不确定ID4是否应该直接与OKta通信以验证其会话。
无论如何,我已经不知所措了。我通常不向SO提出问题,因为我似乎在写质量问题时非常糟糕。希望我能满足这个社区的需求。