我正在为移动应用程序使用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个刷新令牌 客户。如果达到限制,则创建一个新的刷新令牌 自动使最旧的刷新令牌无效,而不会发出警告。
答案 0 :(得分:0)
假设您正在使用从同一授权码创建的刷新令牌创建访问令牌,那么这是可以预期的,因为在刷新访问令牌的同时撤销旧的访问令牌可以确保安全性。
您尝试使用来自2个不同授权码的访问令牌吗?