【问题标题】:Re-authentication using Identity Server 4使用 Identity Server 4 重新认证
【发布时间】:2022-02-09 22:07:33
【问题描述】:

我们有 2 个 MVC 应用程序作为客户端和一个 Identity Server 4。

我们已经使用 owin 设置了 cookie 中间件和 openIdconnect。

客户端 1 的 cookie 生命周期为 40 分钟。

客户端 2 的 cookie 生命周期为 10 分钟(出于安全原因,可能更严格)

我们在授权端点中发送 max-age = session_length,但在某些情况下,我们希望立即发送用户以进行重新身份验证(出于安全原因)。

因此,我们决定在这些情况下发送 max-age=0。

所以我们的问题是,如果我们需要在客户端 cookie 过期之前发送用户进行重新身份验证,用户将被重定向到最大年龄 = 0 的身份服务器,但是如果用户再次点击客户端登录页面会发生什么情况,用户将被重定向到 max-age=session_length 并且用户将获得令牌。

我们如何保护客户? 该用户未经过身份验证,因此我们不知道它是哪个用户。我们如何存储有关用户以前活动的信息?例如,我们可以在哪里存储之前的 max-age 值?因此,如果用户再次尝试访问登录页面,我们将知道正确的 max-age 值。

【问题讨论】:

  • 解释有点乱,不知道你真正想要什么:只是让identityserver在每次执行auth请求时重定向到登录页面(身份服务器本身没有会话=没有sso)?跨度>
  • 您说“用户未经过身份验证,所以我们不知道它是哪个用户”,但这只是身份提供者的特权,而不是客户端决定用户是否经过身份验证的特权。看起来你的照片有点上下颠倒。

标签: oauth single-sign-on identityserver4 owin openid-connect


【解决方案1】:

我认为您使用了错误的机制。要强制重新认证,您应该设置prompt=login,而不是使用max-age,

【讨论】:

【解决方案2】:

在 OpenID Connect 授权重定向期间发送 max-age 参数时,它会在 ID 令牌中作为 auth_time 声明发出。您的每个客户都会有一个单独的其中一个。

因此,给定一个传入请求,检查 cookie,获取 ID 令牌,并查看是否超过了 auth_time。如果是这样(或者如果没有有效的应用程序 cookie)按照 Anders 的说法发送这些参数:

prompt=login, max_age=sessiontime

否则只发送这个:

max_age=sessiontime

当您无法获得所需的注销可用性或可靠性时,通常会使用此机制。只需在注销时从应用程序中删除令牌,并避免注销重定向到授权服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2020-03-22
    • 2019-08-17
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多