【问题标题】:When session should expire in Identity Server 4 with MVC client?带有 MVC 客户端的 Identity Server 4 中的会话何时到期?
【发布时间】:2019-04-22 07:17:53
【问题描述】:

我正在使用带有 IdentityServer3.AccessTokenValidation 和 Identity Server 4 的 MVC 客户端作为我的 IDP 应用程序。

我在下面的地方添加了 cookie 超时,但是似乎会话永远不会过期并且不会自动注销用户 -

在 MVC 客户端中 -

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies",
    ExpireTimeSpan = new TimeSpan(0, 20, 0, 0)
});

如果我设置的时间小于 20 小时,授权请求将无限循环运行

在 IDP 应用中,

services.AddIdentityServer(
    opt => new IdentityServer4.Configuration.IdentityServerOptions
    {
        Authentication = new IdentityServer4.Configuration.AuthenticationOptions()
        {
            CookieLifetime = TimeSpan.FromSeconds(60)
        }
    }

在 IDP 应用中,

.AddCookie("Cookies", opt => {
    opt.ExpireTimeSpan = TimeSpan.FromSeconds(60);
    opt.Cookie = new CookieBuilder() { Expiration = new TimeSpan(0,0,0,60) };
    opt.Events.OnSigningIn = (context) =>
    {
        context.CookieOptions.Expires = DateTimeOffset.UtcNow.AddSeconds(60);
        return Task.CompletedTask;
    };
}) 

【问题讨论】:

  • 客户端当前的身份验证情况如何?
  • @ravneet 我也被困在实现会话超时。它只是不适合我。我不知道为什么。

标签: c# asp.net-mvc .net-core identityserver4 session-management


【解决方案1】:

这是我对此的一般方法的解释:

OIDC 的意图(通过会话管理规范)是 IDP 会话成为“主”,因此当您退出它时,您的所有客户端应用程序会话也应该结束(通过前通道或后通道注销和客户端侧会话监控机制)。

这并不排除客户端应用程序有自己的规则,即用户必须以交互方式进行身份验证的频率或必须使用什么方法。要从客户端控制这一点,您可以使用promptmax_age 授权端点参数,并随后检查返回的id_token 中的auth_time 声明。

在我看来,在此设置中,为 IDP 提供一个相当长的持久性 cookie(只要用户以交互方式进行身份验证时就会更新)和客户端应用程序中的会话(即在浏览器关闭时删除)cookie 是有意义的。

要使所有这些工作,您必须使用公认的授权类型 - 通常是混合用于服务器端应用程序 - 因为只有这样您才能访问启用这些东西的数据和功能。

查看这些规格:

【讨论】:

  • 我在客户端 MVC 应用程序中使用隐式流,使用 cookie 过期为我提供了滑动功能。我实际上是通过设置过期时间来实现的。我的问题仍然是使用 cookie 的最佳方法是什么,或者如何进行后续检查?我正在使用会话心跳,但这使我的客户端应用程序永远不会使会话过期。
猜你喜欢
  • 1970-01-01
  • 2019-02-15
  • 2019-06-23
  • 2020-01-11
  • 2020-03-22
  • 2019-07-25
  • 2020-04-10
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多