如何确保一次只创建一个OAuth 2.0令牌?

8 浏览
0 Comments

如何确保一次只创建一个OAuth 2.0令牌?

我有多个进程(其中一些不受我控制),需要访问一个只允许我一次创建一个OAuth 2.0令牌的API。如果我创建额外的令牌,就有可能将用户踢出应用程序。您对如何管理这个情况有什么建议?

我想我需要创建一个中间层来管理令牌,并将信息传递给API。这样做是可以的,但是即使如此,如果每秒钟有多个请求传入到这个中间层,我如何确保始终只有一个活动令牌?我不会冒着一个调用创建令牌的风险,因为在同一时间没有令牌存在(因此无法刷新),同时另一个调用正在执行相同的操作。

0
0 Comments

如何确保一次只创建一个OAuth 2.0令牌?

鉴于存在多个进程,OAuth终端是它们全部汇合的地方。这似乎是一个解决问题的合理位置。

首先,我会创建一个OAuth代理(正如你所说),这样所有的进程都可以使用它来获取访问/刷新令牌。该代理将用于获取原始的访问/刷新令牌以及处理刷新。

至于确保访问令牌只有一个的逻辑,我会使用以下方法:

1. 首先,代理没有访问令牌,所以当多个进程来获取令牌时,代理将暂停所有这些线程,并从原始的OAuth服务器请求一个访问/刷新令牌。

2. 由于你控制代理,可以同步线程以确保它们都等待访问令牌可用。

3. 此时,每个进程都将拥有相同的访问令牌。

4. 我会让代理在访问令牌过期时进行刷新,并缓存并返回新的令牌(但不是在过期之前)。

5. 代理在旧令牌到期之前不会请求新的令牌,这可以确保同时只有一个访问令牌可用。

谢谢您的回复。我认为这是我最好的选择。您知道如何在C#中实现线程同步吗?只需要使用“lock”吗?就像您所说的,如果同时有10个请求到达,而没有可用的令牌(我猜我需要将其存储在某个地方,比如数据库),那么我只想让其中一个请求获取令牌,而其他9个请求也可以使用相同的令牌。

我不懂C#编程(我是一个Java人),但快速搜索告诉我可以使用锁;类似于stackoverflow.com/questions/15027522/...

0