【问题标题】:Identity Server 4 Signout - Token LifetimeIdentity Server 4 注销 - 令牌生命周期
【发布时间】:2019-03-03 21:38:31
【问题描述】:

我在is.mysite.com 有身份服务器4,然后我有mysite.com,它使用角度来提供内容。最后,我有api.mysite.com,它使用 is4 来保护内容。

我想知道的是用户退出后令牌生命周期的预期行为是什么。考虑以下场景:

  1. 用户打开 mysite.com 并点击登录。
  2. 用户被重定向到 is.mysite.com 并登录
  3. 用户重定向回 mysite.com 并可以发出 api 请求。
  4. 用户在浏览器中打开一个新选项卡并转到 is.mysite.com 并单击注销。
  5. 用户返回到 mysite.com 所在的上一个选项卡并尝试进行 api 调用。

我得到的当前结果是用户能够检索数据。这是预期的吗?用户不应该因为他们已经注销而不再能够使用所述令牌吗?我注销用户的方式如下:

await _loginManager.LoggOffAsync(HttpContext.User);
await HttpContext.SignOutAsync();

另外,如果我访问 is.mysite.com,用户确实已注销。

【问题讨论】:

    标签: c# asp.net-identity identityserver4 identity asp.net-core-identity


    【解决方案1】:

    Angular 客户端可以使用session management 规范监控用户的会话状态,这是通过 iframe 完成的。有关注销过程的更多信息,您可以查看official documentation,特别是描述 Javascript 客户端的部分。

    考虑到会话管理规范的设计方式,您无需在 IdentityServer 中执行任何特殊操作来通知这些客户端用户已退出。但是,客户端必须对 check_session_iframe 进行监控,这是由oidc-client JavaScript library 实现的。

    访问令牌保持有效是预期行为,这就是访问令牌在短时间内有效的原因。如果您需要精确控制访问令牌的有效性,您可以查看reference tokens,它可以被撤销。

    【讨论】:

      【解决方案2】:

      如果您谈论的是带有安全标记的令牌,那么它取决于您为服务配置的验证间隔。将此设置为零将导致在每个请求上都验证安全标记,以便在任何地方注销都会立即生效:

      https://docs.microsoft.com/en-us/previous-versions/aspnet/dn497603%28v%3dvs.108%29

      如果这不是您在各处注销的方式,那么我们需要查看更多您的身份验证设置代码以了解问题所在。

      【讨论】:

        【解决方案3】:

        我已将我的 IdentityServer4 设置为 ReactJS 客户端。对于 javascript 客户端与 IdentityServer4 的通信,我假设您可能已经安装了 oidc-client-js。通过它您可以将用户从您的 AngularClient (mysite.com) 重定向到 IdentityServer4 (is.mysite.com)

        如果是这样,您必须在单击注销按钮时调用 signoutRedirect() 方法。 只有这样您的 AngularClient (mysite.com) 才能成功从 IdentityServer4 (is.mysite.com) 注销您的用户。

        一旦用户退出,剩余的标签将被通知并被浏览器退出。

        “确保在控制器上添加 [Authorize] 标签,以限制客户端在没有有效访问令牌的情况下使用 API。”

        【讨论】:

          猜你喜欢
          • 2016-02-03
          • 2018-06-01
          • 2017-06-29
          • 2019-06-17
          • 2020-08-05
          • 2020-10-06
          • 1970-01-01
          • 1970-01-01
          • 2015-01-08
          相关资源
          最近更新 更多