【发布时间】: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