【问题标题】:How to delete 'Authorization Code Flow with PKCE' session when browser is closed关闭浏览器时如何删除“使用 PKCE 的授权代码流”会话
【发布时间】:2020-04-14 00:13:54
【问题描述】:

我已经使用 Identity Server 4、Angular 8 客户端和 ASP.NET Web API 实现了带有代码交换证明密钥 (PKCE) 的授权代码流。我这样做的方法是遵循快速入门here。它也使用静默刷新。

快乐流程有效:用户可以登录;如果他明确记录或关闭浏览器;会话结束,他需要重新登录。

但也有这种情况不会发生的情况;更具体地说,如果选择了 Chrome 或 Firefox 中的 '记住我离开的地方' 选项。在这种情况下,浏览器只是记住会话,如果用户在数小时或数天后启动浏览器,他仍会登录到该站点。由于该网站将在共享计算机上使用,如果用户没有明确注销,这将是一个潜在的安全问题。

我对如何处理这种情况感到有些困惑。我希望会话在浏览器关闭时结束,总是。有人可以为我指出如何使用 Identity Server 4 实现这一目标的正确方向吗?

【问题讨论】:

    标签: angular authentication asp.net-core identityserver4


    【解决方案1】:

    您可以采取一些措施来解决此问题:

    • 将身份验证令牌的存储更改为sessionStorage,关闭浏览器后应将其清除(我找不到任何证据证明记得我离开的地方 设置会影响 sessionStorage)
    • 在浏览器选项卡或整个浏览器关闭时显式注销用户:Javascript auto logout code
    • 不要使用静默令牌更新,而是手动执行(这涉及一些额外的代码,实现一个 Angular 拦截器以在现有令牌过期时请求新令牌并重置它)。我认为这是一种解决方法,需要付出大量额外的努力,尤其是因为您已经使用了一个非常好的客户端来为您处理有关身份验证和授权的所有事情。

    【讨论】:

    • 谢谢,那么 sessionStorage 可能是最简单的,我将研究如何做到这一点,因为这对我来说都是未知的 :) 但我在 auth0.com/docs/security/store-tokens 读到令牌不应该存储在会话存储中?
    • @L-Four 实际上,令牌最好存储在 Http-Only cookie 中,但我快速浏览了您使用的客户端包,发现它使用了某种存储(没有有足够的时间彻底搜索它是会话还是本地存储)。尝试登录应用程序,然后在开发工具 (F12) 中搜索应用程序的存储空间,查看 auth cookie 的实际存储位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2015-07-03
    • 2013-11-29
    • 2012-09-02
    • 2012-10-26
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多