我工作的一个REST API为至今为止我们已经为一对夫妇的伴侣应用程序内部开发的Web应用程序。 现在,我们正在考虑开放给我们想要的标记,以帮助确定谁正在请求加入到API外部开发者和一般来帮助管理它的使用。 在这一点上,我们使用的是HTTPS和对API的用户身份验证基本身份验证。
我们一直在讨论的令牌方案是非常简单的,其中每个开发人员将被分配1个或多个标记和这些标记将与每个请求的参数传递。
我的问题是,如果你做了之前类似的事情你是怎么做到这一点(你做多还是少,你是怎么处理的安全性等),你有什么建议?
谢谢!
首先,你可能想看看http://OAuth.net 。 根据您的usecases,它可以提供你所需要的安全性。
至于原因,这是一个BLOB大多数的协议,其中包括OAuth。 你可以把你在它需要的任何格式的任何信息。
这是我们做什么,
- 首先,我们分配给每个开发人员相关的秘密的关键。
- 令牌本身是加密的名称 - 值对。 我们把东西喜欢的用户名,过期,会话ID,角色等在那里。 它与我们自己的秘密加密,因此没有人能做到。
- 为了方便使用Web API的使用,我们使用Base64编码的网址安全的版本,所以令牌总是网址安全。
希望帮助!
您可能还需要考虑一下,也许增加一个基于时间的令牌,将允许您限制时间的请求是有效的量。 这将有助于有人试图做一个重放攻击。
你将有一个握手调用get /分配基于关闭上述替换DeveloperKey一次有效令牌。 此令牌将被存储在本地,并传回给调用者。
这样,开发人员将使用该密钥在请求验证请求和开发商。
例如该密钥然后可以使用5分钟或10名的请求或任何你定义。 该点后所生成的基于时间的令牌从有效列表中删除,并且可以不再使用。 那么开发商将不得不寻求新的令牌。
UUID是你看中祭出了任何临时随机密钥非常好。 不可预知的和快速的生成,与碰撞所以他们不可能是有效的唯一。 让漂亮的会话密钥也。