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

xcitsw88  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(107)

我有多个进程(有些不受我的控制)需要访问一个API,而该API一次只允许我创建一个OAuth 2.0令牌。如果我创建更多令牌,我将面临将用户逐出应用程序的风险。您对如何管理此问题有何建议?
我认为我需要创建一个中间层来管理令牌并将信息传递给API,这很好,但即使如此,如果每秒有多个请求进入这个中间层,我如何确保我一次只有一个活动令牌?我是否不会冒一个调用创建令牌的风险,因为令牌不存在(因此无法刷新)同时另一个调用正在执行相同的操作?

gj3fmq9x

gj3fmq9x1#

考虑到存在多个进程的事实,oauth端点是所有进程的交汇点,这似乎是解决该问题的一个合理点。
首先,我会创建一个oAuth代理(正如你所说的),所有进程都使用它来获取访问/刷新令牌。这个代理将用于获取原始访问/刷新令牌和处理刷新。
至于使访问令牌成为一件事,我将使用以下逻辑:

  • 最初,代理没有访问令牌,因此当多个进程获得一个令牌时,代理将持有所有这些线程,并从原始oAuth服务器请求一个访问/刷新令牌
  • 由于您控制代理,您可以同步线程,以确保它们都等待访问令牌可用
  • 此时,每个进程都将具有相同的访问令牌
  • 我将使代理了解访问令牌何时过期,因此当进程请求令牌时,如果令牌过期(但不是之前),则代理将刷新令牌,缓存它并返回
  • 代理在旧令牌到期之前不会请求新令牌的事实;这保证了在同一时间不会有多于一个的访问令牌可用

相关问题