2014-04-01 86 views
1

我一直在为我公司的网站制作标准化的JSON API;我希望有一种验证用户使用API​​的方法,同时尽可能保持API无状态。我的想法是以下几点:按请求API密钥

  1. 用户登录,Web服务对用户进行认证,并生成被传递到客户端,与到期日期一个随机字符串。这存储在cookie中,以及数据库中的条目。

  2. 对于每个API请求,Web服务都会根据数据库条目检查cookie字符串。如果进行身份验证,Web服务将生成一个新字符串,将旧字符串替换为数据库中的新字符串和Cookie,然后发回请求的信息。

  3. 如果客户端发送一个请求,并在数据库中的字符串设置为NULL cookie不匹配的数据库条目和客户端必须再次登录,并从步骤启动过程1.

  4. 如果在到期日期之后发送请求,则数据库中的字符串将设置为NULL,并且用户必须再次登录。

我想造成尽可能少的干扰尽可能与我公司目前的设置为我们慢慢过渡到新技术。这种方法通常是做什么的?如果我这样做,会遇到什么样的安全问题?我应该使用不同的方法吗?

回答

0

是的,这是一种常见的情况。你所描述的是一个会话cookie并被广泛使用。

您可能想要阅读Session Fixation技术和减轻这些技术的方法。

但是使用会话并不是真正的无状态。如果您可以向API消费者提供密钥(共享密钥),则还可以考虑使用消息签名来验证请求。确保你使用的是(H)MAC。另外请确保你从Replay Attacks以上。

+0

难道我这样做的方式 - 会话ID永远不能使用两次,即使在同一个用户 - 帮助避免重播攻击? –

+0

重放攻击在签名邮件区域更加有趣。会议固定是为你的会议。对于您的具体情况,您应该选择两种方法之一(会话或消息签名)。签名是无状态的,但需要您安全地交换密钥(这可能在您提供API时起作用)。 – seong

相关问题