【问题标题】:Using IdentityServer4 Refresh Tokens使用 IdentityServer4 刷新令牌
【发布时间】:2019-12-23 16:05:48
【问题描述】:

我正在寻找有关如何使用刷新令牌的简单、清晰的说明。我知道一旦访问令牌过期,就会使用刷新令牌来获取新的访问令牌。 假设用户已通过身份验证并获得刷新令牌和访问令牌。

问题 1: 当访问令牌过期时,IdentityServer4(不是用户尝试访问的 api)是否认为用户是“未经身份验证”的?

问题 2: 假设访问令牌过期,我可以在使用刷新令牌之前等待多久?我的意思是,如果访问令牌现在过期,并且我没有立即需要访问受保护的 API,并且需要在 5 小时后出现,我是否可以拿起刷新令牌并使用它来获得新的访问权限令牌?

问题 3: 如果我想要一个永不过期的访问令牌怎么办?可以说我有一个像 facebook 这样的应用程序,用户通常从不真正注销。如何实现该功能?

【问题讨论】:

    标签: security oauth-2.0 identityserver4 openid-connect


    【解决方案1】:

    请注意,访问令牌用于客户端代表用户访问资源 (api)。对于使用 cookie 身份验证且没有外部资源的网站,不需要刷新令牌。

    问题 1: 假设您使用的是 JWT 令牌:从资源的角度来看,请求是未经授权的。由于这是从客户端到资源的直接请求,IdentityServer 不是其中的一部分。

    从网站的角度来看,用户可能仍处于登录状态,因为 cookie 没有过期。这可能会导致(对于网站)经过身份验证的用户无法访问外部资源(访问令牌已过期)的“奇怪”情况。正是在这种情况下,您需要刷新令牌。

    对于 cookie 身份验证,有一些方法可以延长 cookie 的生命周期。

    问题 2: 您可以随意等待,但要考虑到刷新令牌也可能过期。有一些选项可以延长使用寿命。

    另请注意,您可以请求任意数量的访问令牌。您不必等到访问令牌过期。但这可能不如检查访问令牌的到期效率。

    配置一次性使用时,刷新令牌只能使用一次。在请求的结果中,将提供一个新的刷新令牌。

    问题 3: 你说的是 cookie 还是令牌?对于网站,您可以延长 cookie 的生命周期。

    【讨论】:

    • 感谢您的回复 Ruard。我觉得你解释的很清楚。对于问题 3,问题是我正在构建一个 Xamarin Forms 应用程序。因此,我们不在 Web 应用程序的上下文中。如果您考虑使用 facebook 移动应用程序,您可以在安装应用程序时登录一次。然后,您无需再次进行身份验证,只需根据需要导航应用程序。当您在任何一天访问它时,该应用程序无疑会访问 API。因此,只要您主动注销,就好像您进行了一次身份验证,并且应用程序(客户端)可以永远访问 API。
    • 当您处于移动应用程序的上下文中时,您可以在技术上发出一个永不过期的令牌,但这会破坏 OAuth 和短期访问令牌的目的,因为您无法撤销访问令牌,但您可以撤销刷新令牌.这就是为什么你应该回退到问题 2。@arlvin
    • @VidmantasBlazevicius 在我看来,访问令牌是一个有价值的实体,因此在移动应用程序的上下文中,您应该努力使其尽可能安全 - 即通过安全飞地等安全平台功能保护它安卓等价物。通常,您只想让它们存在于客户端,因为它们以这种方式受到保护。
    猜你喜欢
    • 2018-07-07
    • 2019-03-23
    • 2020-09-12
    • 2017-03-30
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2020-02-23
    相关资源
    最近更新 更多