我有一个使用 OAuth 1.0a 对使用它的应用程序进行身份验证的 api。它正在替换一个旧的 api,该 api 使用了许多已被弃用的自定义构建和大杂烩调用。
众所周知,OAuth 1.0a 在(客户端)Javascript 中是不安全的,因为它依赖于保密的消费者秘密。这是不可能的,因为源始终可见。
我们有 Chrome、Firefox、IE 和 Safari 的浏览器扩展,将来需要使用这个 api。这些扩展大部分或完全用 Javascript 编写,因此存在安全问题。
这些扩展是内部的,因此可以使用自定义身份验证方法来获取其访问令牌。
我计划实施的内容如下:
- 用户在浏览器中登录网站。
- 该网站向他们发送一个带有会话密钥的 cookie。
- 然后,我们的扩展程序获取该 cookie 并将其传递给 api。
- 该 api 验证它是一个有效且活动的会话,并向扩展发出其访问令牌。
- 这些令牌在到期前最多持续一小时。
- javascript 发布的 cookie 的速率限制也会较低。
它在以下假设下运作:
- 如果另一个应用程序可以访问您的 cookie,那么他们无论如何都可以在网站上冒充您,因此访问 api 没有什么不同。
- 所有身份验证方法仍然通过我们的控制。
- 令牌的定期到期意味着如果它们被破坏,那么利用的时间是有限的。
我的问题是,这是限制对 api 的访问的安全方法吗?有没有更好的?
一些笔记。 我知道 chrome 扩展可以请求访问给定站点的 cookie 的权限。我相信 Firefox 扩展也可以做到这一点。
显然,我们不希望通过任何页面上的 javascript 访问我们的 cookie,否则我们会将自己暴露于 XSS 攻击,因此它们只需要通过扩展来访问。