在表单中提交API密钥?

时间:2013-01-06 03:32:29

标签: ruby-on-rails api-key

我有一个json API用于用户拥有的一些资源。我使用API​​访问密钥保护API访问,如此railscast中所述:http://railscasts.com/episodes/352-securing-an-api

这很好用,我为每个用户提供了一个唯一的密钥,当他们想要添加/更新/删除资源时,他们必须提交。我遇到的问题是,除了API之外,用户应该能够从Web表单编辑资源。但这不起作用,因为表单不会在标头中提交API密钥,因此访问被拒绝。

有没有办法让表单为用户发送访问密钥,因为他们已经登录?或许我错了?也许我应该检查是否存在活动会话,并且在那种情况下将其用作身份验证而不是API密钥?

1 个答案:

答案 0 :(得分:0)

  

有没有办法让表单为用户发送访问密钥   既然他们已经登录了?

可以通过在表单中​​将hidden字段包含在内来为用户发送API访问密钥。收到后,您可以将其与已登录用户的已分配访问密钥进行比较。

但请考虑一下您的客户和您的业务。在表单中以明文形式包含API密钥就像给黑客一样,实际上可以访问他们想要的任何内容,特别是在没有配置HTTPS的情况下。

  

也许我应该检查是否存在活动会话,并且在这种情况下使用它作为身份验证而不是API密钥?

是的,这是执行此操作的安全方法之一。你提到的第一种方法根本不安全。不要将任何与身份验证相关的内容放在容易更改的地方(表单,cookie)。

如果您愿意,可以将session-based authenticationAPI access Key同时使用。怎么样?假设您为每个修改请求生成一个带有到期日期的API访问密钥。每次修改都需要在触发后的x分钟内提交。提交后,您针对session用户进行身份验证,针对{​​{1}}对修改进行身份验证。这是只是的一个例子。