Oauth2,本机应用程序和令牌窃取

时间:2018-10-09 10:18:44

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

我正在为移动应用程序使用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似乎从我的授权服务器收到了相同的刷新令牌,以进行具有相同应用程序和用户名的呼叫。最终,这导致第二个呼叫也刷新了电话1上的访问令牌。

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

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

修改

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

  

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

1 个答案:

答案 0 :(得分:0)

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

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