Web API令牌方案的好方法?

时间:2009-08-10 20:39:50

标签: api rest

我正在为一个Web应用程序开发一个REST API,到目前为止我们已经在内部开发了几个配套应用程序。现在我们正在考虑向外部开发人员开放,我们希望向API添加令牌,以帮助确定谁在提出请求,并且通常帮助管理它的使用。此时,我们使用https和基本身份验证对API进行用户身份验证。

我们一直在讨论的令牌方案非常简单,每个开发人员将分配一个或多个令牌,这些令牌将作为参数传递给每个请求。

我的问题是,如果你在做过之前做过类似的事情(你做得多或少,你是如何处理安全性等)并且你有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:6)

首先,您可能需要查看http://OAuth.net。根据您的使用情况,它可能会提供您所需的安全性。

对于令牌,它是大多数协议的BLOB,包括OAuth。您可以以任何格式提供所需的任何信息。

以下是我们的工作,

  1. 首先,我们为每个开发人员分配一个带有相关秘密的密钥。
  2. 令牌本身是加密的名称 - 值对。我们在那里放置了用户名,到期日,会​​话ID,角色等内容。它是用我们自己的秘密加密的,所以没有其他人可以做到。
  3. 为了便于使用Web API,我们使用Base64的URL安全版本,因此令牌始终是URL安全的。
  4. 希望有所帮助!

答案 1 :(得分:2)

您可能还想考虑添加基于时间的令牌,以允许您限制请求有效的时间。这将有助于尝试进行重播攻击的人。

您将根据上述developerKey进行握手调用以获取/分配时间有效令牌。该令牌将存储在本地并传递回调用者。

然后,开发人员将在请求中使用此密钥来验证请求和开发人员。

例如,该密钥可用于5分钟或10个请求或您定义的任何内容。在此之后,生成的基于时间的令牌将从有效列表中删除,并且无法再使用。然后开发人员必须要求新的令牌。

答案 2 :(得分:1)

UUID非常适合您喜欢的任何临时随机密钥。不可预测且快速生成,碰撞不太可能,它们实际上是独一无二的。制作好的会话密钥。