【问题标题】:OAuth2 - unnecessary complexity with refresh tokenOAuth2 - 刷新令牌不必要的复杂性
【发布时间】:2015-12-15 19:48:47
【问题描述】:

我不明白,如果端点与RFC6749 中多次描述的相同(授权)服务器,为什么 oauth2 中有刷新/访问令牌概念。

当资源所有者在不共享凭证的情况下授权任何第三方组件时,第一个授权步骤是 oauth2 的基本思想。使用授权令牌生成访问和刷新令牌只是另一个级别的授权间接恕我直言,但不会增加安全性。

由于授权服务器相同,因此访问令牌与授权令牌和刷新令牌一样敏感,因此我称其为不必要的复杂性。

对我来说唯一有意义的解释是,如果有人窃取了访问令牌,则客户端能够请求新的访问令牌。但是有人是怎么炼成的呢?如果是中间人,那么当客户端请求一个新令牌时,他也有刷新令牌。

我的问题是:为什么授权服务器不只是返回一个可以被客户端和资源所有者撤销的访问令牌?刷新/访问令牌策略有什么好处?

感谢您的解释。

【问题讨论】:

    标签: security oauth oauth-2.0


    【解决方案1】:

    刷新令牌是尝试通过服务器负载解决细粒度访问检查。当资源所有者在调用之间缓存访问令牌以便它可以在不去授权服务器的情况下授权后续调用时,就会减少服务器负载。这大大减少了 authz 服务器上的负载。但这引入了一个问题,即令牌权限的更改,特别是令牌可用于的用途的减少,资源所有者永远不会看到,因为它正在缓存访问令牌。

    现在,行为良好的资源所有者会知道,在与授权服务器重新确认之前,它应该只缓存令牌一小段时间。但是你不能指望资源所有者表现良好。因此,授权服务器对访问令牌设置了相对较短的到期时间。这会强制客户端使用刷新令牌来获取新的访问令牌。然后资源所有者将验证新的访问令牌并获得令牌的当前权限。

    请务必注意,无需用户交互即可刷新访问令牌。如果重新验证对用户交互模型来说不是问题,则不需要刷新令牌,用户只需重新验证即可。但这有点糟糕。

    这意味着,如果用户要从其 OAuth 帐户中删除权限,资源所有者将继续使用旧权限集运行,直到访问令牌过期。然后将获得新的访问令牌,新的权限集将生效。

    【讨论】:

    • 好吧,我太关注安全了。总而言之,如果我理解正确的话,这只是为了实现缓存和更新权限的想法。谢谢你,尼尔
    • 刷新令牌仍然没有意义,很容易被拦截/劫持然后繁荣......获得尽可能多的访问令牌。
    • @Konrad - 如果您不使用传输层安全性(例如:SSL/TLS),所有安全性都会失败。刷新令牌旨在强制您使用服务器重新验证用户仍然具有相同的权限。它与网络安全无关。一般来说,所有现代授权平台都将传输层安全性视为给定的,并且不会尝试解决它。​​
    • 是的......可能是唯一的好理由。不再登录,而是使用“凭据”之类的刷新令牌并在后台刷新令牌。无需要求用户再次登录。
    • 在我看来,它仍然带来了很多复杂性。标准定义不明确,难以理解。
    【解决方案2】:

    除了 Neil 的精彩回答:在只有一个令牌的情况下,您如何想象撤销该令牌会发生?这必然会涉及到资源服务器(RS)咨询授权服务器(AS),这是一个巨大的开销。这正是分裂存在的原因:短期访问令牌可以独立于 AS 的检查而独立存在。长期刷新令牌与 AS 协调访问权限。

    【讨论】:

    • 这也是一个好点。没看懂,授权码是一次性的,应该10分钟左右有效。
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 2017-12-13
    • 2012-07-21
    • 2017-05-29
    • 2017-12-25
    • 2020-06-08
    • 2015-08-31
    • 2016-08-13
    相关资源
    最近更新 更多