【问题标题】:Oauth2, native apps and token stealingOauth2、本机应用程序和令牌窃取
【发布时间】:2019-03-14 02:11:22
【问题描述】:

我正在为我的移动应用程序使用 OAuth2 授权机制来访问我的资源服务器。我已经定义了客户端,它有它的秘密,名称 mobile_client 并使用授权码授予来获取刷新令牌。我还有一位用户user@app.pl 在两部手机上使用我的应用程序。我注意到令牌窃取的问题。

场景如下:

                                                +---------------+
 (Phone 1)----------- Refresh Token1----------->| Authorization |
 (Phone 1)<--- Access Token1+Refresh Token2-----|    Server     |
                                                +---------------+
                                  +----------+ 
 (Phone 1)---- Access Token1 ---->| Resource |
 (Phone 1)-- Protected Resource --|  Server  |
                                  +----------+ 
                                                +---------------+
 (Phone 2)---------- Refresh Token2 ----------->| Authorization |
 (Phone 2)<--- Access Token2+Refresh Token3-----|    Server     |
                                                +---------------+
                                 +----------+ 
 (Phone 1)---- Access Token1 --->| Resource |
 (Phone 1)<- 401 TOKEN EXPIRED!  |  Server  |
                                 +----------+ 

看起来电话 1 和电话 2 上的 user@app.pl 从我的授权服务器收到了相同的刷新令牌,用于使用相同的应用程序和用户名的呼叫。这最终导致第二次调用也刷新了Phone 1上的Access Token。

这是授权服务器的正确行为吗?

我使用 Spring Security Oauth2 2.3.3.RELEASE 和 Spring Security 5.1.0.RELEASE

编辑

正如我在 Google oauth2 规范中看到的,它们为每个用户提供了更多的刷新令牌,因此应该在 Spring 中以某种方式进行配置。

目前每个用户帐户的每次刷新令牌限制为 50 个 客户。如果达到限制,则创建一个新的刷新令牌 自动使最旧的刷新令牌无效而不发出警告。

【问题讨论】:

    标签: spring oauth-2.0 spring-security-oauth2


    【解决方案1】:

    假设您正在使用从同一授权代码创建的刷新令牌创建访问令牌,我会说这是预期的情况,因为在刷新访问令牌的同时撤销旧的访问令牌可确保安全性。

    您是否尝试过使用来自 2 个不同授权码的访问令牌?

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 2020-01-26
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多