3

我们有一个带有 json API 的应用程序。我们在浏览器中使用 Javascript 向其发送 ajax 调用。每个 API 调用都需要一个 API 密钥。

我计划实现一个登录 API,它接受用户名和密码并返回该特定用户的 API 密钥。密钥将进入 cookie 并随每个 API 请求传回。(您仍然可以将它包含在 json 请求中;cookie 将是一个后备。)

这种方案的最大好处是我们不需要在服务器端维护会话。服务器端的一切都是无状态的。当您在集群环境中时,无状态操作有很大的好处。

这是一个坏主意吗?它安全吗?有没有更好的办法?

假设我们正在运行 https。

4

2 回答 2

2

不,您提到的方式,即使您使用 https,您的 API 密钥也不安全。这是因为 API 密钥现在存在于您的浏览器中,并且很容易被浏览器插件、脚本等暴露。

这里要考虑的另一件事是您的令牌的有效期。在这种情况下,建议使用较短的 API 令牌到期时间。

幸运的是,很多人都有相同的要求,并且 OAuth 2 规范针对您提到的用例提供了一个隐式授权案例流程。您可以查看并决定您的方法,

https://www.rfc-editor.org/rfc/rfc6749#section-4.2

于 2013-07-20T04:44:47.643 回答
1

如果您不需要对旧浏览器的支持,并且您只需要访问 api key 客户端,那么您可以使用本地存储,这样您就不必向服务器发送 cookie 和从服务器发送 cookie,并且没有 cookie可以被盗。

于 2013-07-19T23:32:16.477 回答