【问题标题】:How do I make sure to only create one OAuth 2.0 token at a time?如何确保一次只创建一个 OAuth 2.0 令牌?
【发布时间】:2022-11-02 03:32:41
【问题描述】:
我有多个进程(一些不受我控制)需要访问一个 API,该 API 一次只允许我创建一个 OAuth 2.0 令牌。如果我创建额外的令牌,我就有将用户踢出应用程序的风险。你对如何管理这个有什么建议?
我想我需要创建一个中间层来管理令牌并将信息传递给 API。这很好,但即便如此,如果每秒有多个请求进入这个中间层,我如何确保我一次只有一个活动令牌?我不会冒一个调用创建令牌的风险,因为不存在(因此无法刷新)同时另一个调用正在执行相同的操作?
【问题讨论】:
标签:
c#
oauth-2.0
oauth
token
bearer-token
【解决方案1】:
鉴于有多个进程,oauth 端点是所有进程相遇的地方。似乎是解决这个问题的合乎逻辑的地方。
首先,我将创建一个 oAuth 代理(如您所说),因此所有进程都使用它来获取访问/刷新令牌。该代理将用于获取原始访问/刷新令牌和处理刷新。
至于使访问令牌完全是一回事,我会使用这个逻辑:
- 最初,代理没有访问令牌,因此当多个进程来获取一个时,代理将持有所有这些线程,并从原始 oAuth 服务器请求一个访问/刷新令牌
- 由于您控制代理,您可以同步线程以确保它们都等待访问令牌可用
- 此时每个进程都将拥有相同的访问令牌
- 我会让代理了解访问令牌何时过期,因此当进程请求令牌时,如果令牌已过期(但不是之前),那么代理将刷新令牌、缓存并返回
- 代理在旧令牌过期之前不会请求新令牌这一事实;这保证不会有超过一个访问令牌同时可用