首页 文章

Oauth2,原生应用和令牌窃取

提问于
浏览
1

我正在为我的移动应用程序使用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上的 user@app.pl ,而电话2从我的授权服务器收到相同的刷新令牌,用于具有相同应用和用户名的呼叫 . 这最终导致第二次呼叫刷新了电话1上的访问令牌 .

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

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

Edit

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

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

1 回答

  • 0

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

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

相关问题