gpt4 book ai didi

oauth - OAuth 线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 19:53:39 25 4
gpt4 key购买 nike

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 凭证(即,一旦您建立凭证)的一个很好的讨论:

Optimizing OAuth 2.0 Requests

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com