1

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

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

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

4

1 回答 1

0

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

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

但是想想你的客户和你的业务。在表单中以明文形式包含 API 密钥就像让黑客从字面上看可以更改他们想要的任何内容,尤其是在未配置 HTTPS 的情况下。

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

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

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

于 2013-01-06T05:24:10.773 回答