Rest web API令牌方案的好方法?

Rest web API令牌方案的好方法?,rest,restapi,Rest,Restapi,我正在为一个web应用程序开发RESTAPI,到目前为止,我们已经在内部为几个配套应用程序开发了该应用程序。现在,我们正在考虑向外部开发人员开放,我们希望向API添加令牌,以帮助识别谁在发出请求,并帮助管理其使用。此时,我们使用https和基本身份验证在API上进行用户身份验证 我们讨论的令牌方案非常简单,每个开发人员将被分配1个或多个令牌,这些令牌将作为参数随每个请求传递 我的问题是,如果您以前做过类似的事情,您是如何做的(您做了多少,您是如何处理安全性的,等等),您有什么建议吗?首先,您可能

我正在为一个web应用程序开发RESTAPI,到目前为止,我们已经在内部为几个配套应用程序开发了该应用程序。现在,我们正在考虑向外部开发人员开放,我们希望向API添加令牌,以帮助识别谁在发出请求,并帮助管理其使用。此时,我们使用https和基本身份验证在API上进行用户身份验证

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


我的问题是,如果您以前做过类似的事情,您是如何做的(您做了多少,您是如何处理安全性的,等等),您有什么建议吗?

首先,您可能想看看。根据您的用例,它可能会提供您需要的安全性

至于令牌,它是大多数协议的一个BLOB,包括OAuth。你可以把你需要的任何信息以任何格式放进去

这就是我们要做的

  • 首先,我们为每个开发人员分配一个带有相关机密的密钥
  • 令牌本身是一个加密的名称-值对。我们把用户名、有效期、会话id、角色等放在里面。它是用我们自己的秘密加密的,所以没有人能做到
  • 为了便于使用web API,我们使用了Base64的URL安全版本,因此令牌始终是URL安全的

  • 希望有帮助

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

    根据上述developerKey,您将有一个握手呼叫来获取/分配一个时间有效的令牌。此令牌将存储在本地并传递回调用方

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


    例如,该键可用于5分钟或10个请求,或任何您定义的时间。在该点之后,生成的基于时间的令牌将从有效列表中删除,并且不能再使用。然后,开发人员将不得不请求一个新的令牌。

    UUID对于您想要抛出的任何临时随机密钥都非常有用。不可预测且生成速度快,碰撞的可能性非常小,它们实际上是唯一的。还要制作漂亮的会话密钥。

    对于任何感兴趣的人,我在这里写了一篇文章,讲述了如何在没有OAuth的情况下从没有安全性过渡到安全的REST API:问题不在于标识(唯一令牌等)。问题在于关闭攻击向量和模拟用户的人。通过HTTP,需要校验和或“HMAC”——使用只有客户端和服务器知道的密钥对请求中的所有值进行签名。通过HTTPS,这要容易得多,一个简单的令牌就可以了。