【发布时间】:2015-06-23 13:17:10
【问题描述】:
我有一个关于如何使用访问令牌和 API 密钥构建 REST API 的问题。
我有一个需要身份验证的 API。我想启用两个用例:
用户使用 OAuth2(密码授予)登录界面,并被授予临时访问令牌。此令牌用于对用户进行身份验证。因此,本身使用 API 的 UI 可以获取数据并显示它。
我还希望用户拥有一个 API 密钥来执行相同的调用,但在其应用程序中。显然,与访问令牌相反,我希望 API 密钥能够长期存在。此外,与绑定到给定用户的访问令牌相反(如果我们引入团队机制,每个用户将拥有不同的访问令牌,尽管他们访问相同的资源),API 密钥对于项目应该是唯一的。
虽然类似,但我不确定我应该如何构建它。我认为,在内部,API 密钥和访问令牌都应该存储在同一个表中,但 API 密钥没有过期时间。我说的对吗?
我也不确定客户的概念。似乎在规范中,客户端更像是一个外部应用程序。但是我真的可以在这里使用这个概念吗?
例如,每个“项目”实际上是一个不同的客户端(虽然这里的客户端是同一个应用程序,而不是第三方开发者创建的应用程序)。
因此,如果用户 A 在系统上创建帐户,则会自动创建一个客户端 A,其访问令牌与客户端 A 绑定,并具有长期访问令牌(也称为 API 密钥)。例如,这可以用来直接在他的代码上执行 API 调用。
然后,如果用户 A 登录仪表板,将创建一个临时访问令牌,但这次没有应用程序,而是与用户绑定,寿命很短。
这听起来合理吗?有没有人已经实现了这样的东西?
谢谢!
【问题讨论】:
-
API 密钥和访问令牌是不同的概念,分别建模和存储。
-
是的,但是您如何处理我想以同质方式访问 API 的事实?我不想有不同的方式来使用 API。我的网络应用程序是使用临时令牌使用它还是客户端使用 API 密钥直接从他的网络服务器使用 API。