使用OAuth 2令牌构建testmode / livemode

时间:2014-07-02 19:41:13

标签: api

标题有点模糊。我对某些特定架构模式的反馈感兴趣。

让我们以Stripe API为例:当您使用此API时,系统基本上分为两部分:实时模式和测试模式。如果你点击" / customers"终点,您可以根据所使用的API密钥类型检索测试模式客户或实时模式客户。

我问自己如何使用OAuth 2访问令牌实现这样的模式。

在我的工作流程中,我有一个通过我的API进行通信的应用程序页面(JavaScript)。我有一个"直播" /"测试"切换,基本上我的整个网站都被复制到两个不同的环境中。

当我登录我的应用程序时,我的授权服务器会为每个请求创建一个唯一的访问令牌(OAuth 2 Bearer令牌)。但显然,我的访问令牌与"会话"相关联,而不是"环境" (生或假),所以如果我想实现切换实时模式/测试模式,我就不能依赖令牌,因为令牌是"泛型"。

我考虑过两个选择:

  • 根据实时模式或测试模式,我会向我的所有请求发送一个额外的标头(例如X-Livemode,无论是true还是false)。然后,在我的后端,我重复使用此标头自动为我的所有请求添加过滤器。

  • 如果我切换到实时模式或测试模式,我会向授权服务器询问另一个访问令牌。这意味着访问令牌将具有其他上下文信息。然而,这似乎有点复杂,我不确定OAuth 2规范是否允许令牌具有此类附加信息。

我不确定这篇文章是否清楚:p。

问题的第二部分是什么是实现这样一个系统的最佳方法,其中所有资源在实时/测试模式之间基本上都是重复的?

据我所知,它应该像添加" isLivemode"一样简单。属性到所有资源,并确保我的所有SQL查询都知道这一点。这是对的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我过去使用的一个更简单的解决方案(虽然有点解决方法)只是将“live”或“test”(base64或hex编码)附加到api键,如下所示:

想象一下你的实际关键是:

9a0554259914a86fb9e7eb014e4e5d52

在您的主要演示文稿中,将您的密钥呈现给用户:

9a0554259914a86fb9e7eb014e4e5d526c697665

然后使用正则表达式去除已知字符。

或者,如果您有能力处理键值映射,则更多“OAuth2-spec”方法将生成实时和测试的唯一键,并对请求执行键值映射查找以确定是否存在属于生活或考试。