Dev*_*nny 5 multithreading asynchronous spring-security access-token oauth-2.0
我在我的应用程序中使用Spring Security Oauth2作为安全层.一切顺利,直到同时出现异步调用.
有人可以告诉我如何处理下一个案例:
1.客户端有一个已经过期的accessToken.
2.客户端对我的api进行两次并发的异步api调用(例如:Thread1,Thread2).
3. Thread1在Thread2之前收到错误:"accessToken expired".
4.通过使用refreshToken,Thread1接收一个新的accessToken = qqqqq.
5.在Thread1使用新的accessToken = qqqqq对服务器进行新调用之前,Thread2收到错误:"accessToken expired".
6.通过使用refreshToken,Thread2接收一个新的accessToken = wwwww并删除accessToken = qqqqq.
7.这里,Thread1使用accessToken = qqqqq调用服务器,该服务器不活动.
8.从理论上讲,很可能通过相互无效来循环两个线程.
我将不胜感激,谢谢.
如果您已控制客户端,则可以将版本号附加到访问令牌 - 如果线程尝试使用旧版本号刷新访问令牌,则会返回当前(最近刷新的)访问令牌.
public class AccessToken {
private int currentVersion;
private String accessToken;
private static AccessToken currentToken;
public static synchronized AccessToken refresh(AccessToken token) {
if(token.currentVersion == currentToken.currentVersion) {
AccessToken newToken = // refresh token
newToken.currentVersion = currentToken.currentVersion + 1;
currentToken = newToken;
}
return currentToken;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您对客户端没有任何控制权和/或宁愿修复此服务器端,那么有几个选项:
| 归档时间: |
|
| 查看次数: |
2216 次 |
| 最近记录: |