- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
OAuth 的访问 token /刷新 token 流对我来说似乎非常不安全。帮助我更好地理解它。
假设我正在与利用 OAuth 的 API 集成(如 this one )。我有我的访问 token ,我正在调用 API —— 一切都很好。但是后来我的访问 token 过期了,我需要一个新的。没问题,我使用了我发出的刷新 token ,我得到了一个新的。
上面的一切听起来都很好而且花花公子......但不是在多线程世界中。意思是,如果上述操作都在不同线程上的完全相同的实例上发生两次(例如,两个用户同时针对同一个对象请求 API 调用),并且在任何给定时间只能有一个访问 token 处于事件状态,则获胜不是一个抵消另一个?在一个高度事务性的应用程序中,这种情况不会经常发生。
我有一种强烈的感觉,这是一个愚蠢的问题,但我无法思考如何实现线程安全。
最佳答案
Oauth 是一种协议(protocol)。这取决于特定的实现,该实现是否是“线程安全的”。
Oauth2 != Oauth: How is OAuth 2 different from OAuth 1?
而且 REST API(就像你引用的那个)本质上是无状态的,所以真的没有“线程安全”的问题。
最后,这里是关于如何在多线程应用程序之间共享 OAuth2 凭证(即,一旦您建立凭证)的一个很好的讨论:
In multithreaded applications, the credential should be shared between threads. Refreshing of the credential should be performed synchronously to avoid a race condition.
The client libraries make sharing a credential across threads straightforward. Each client library has a session (or user) object which is constructed with a credential that it reuses throughout its lifetime. To share the credential across threads, simply construct each session using the same credential. In all client libraries, the credential is a thread-safe object and refreshes itself synchronously when its access token expires.
For example, in the Java client library, you would create a Credential as a singleton and share it across all sessions.
关于oauth - OAuth 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37084682/
我是一名优秀的程序员,十分优秀!