我有一个使用OAuth 1.0a对其进行身份验证的应用程序的API。它取代了一个旧的api,该api使用了许多已弃用的自定义构建和hodge-podge调用。

众所周知,OAuth 1.0a在(客户端)Javascript中并不安全,因为它依赖于将用户 secret 保密。由于源始终可见,因此这是不可能的。

我们拥有适用于Chrome,Firefox,IE和Safari的浏览器扩展,以后需要使用此api。这些扩展全部或大部分用Java语言编写,因此存在安全性问题。

这些扩展是内部的,因此可以具有自定义身份验证方法来获取其访问 token 。

我打算实现以下内容:

  • 用户在浏览器中登录网站。
  • 网站向他们发布带有 session key 的cookie。
  • 然后,我们的扩展程序获取该cookie并将其传递给api。
  • 该api验证它是有效的 Activity session ,并向扩展发布其访问 token 。
  • 这些 token 在过期之前最多可持续一小时。
  • javascript发出的cookie的速率也将降低。

  • 它在以下假设下运行:
  • 如果另一个应用程序可以访问您的cookie,那么它们仍然可以在网站上模拟您,因此对api的访问没有什么不同。
  • 所有身份验证方法仍通过我们的控制。
  • token 的定期到期意味着,如果 token 遭到破坏,则剥削的时间将很有限。

  • 我的问题是,这是限制对api的访问的安全方法吗?
    还有更好的吗?

    一些注意事项。
    我知道,chrome扩展程序可以请求访问给定站点的Cookie的权限。我相信Firefox扩展也可以这样做。

    显然,我们不希望通过任何页面上的javascript访问cookie,否则我们将遭受XSS攻击,因此仅需要通过扩展名即可访问它们。

    最佳答案

    我写了一个网站,该网站通过OAuth的JavaScript库进行OAuth登录。这是工作流程:

  • OAuth仅在具有LocalStorage
  • 的浏览器上受支持
  • 登录表单将检查LocalStorage的OAuth key ,如果存在OAuth key ,则自动尝试OAuth登录。
  • 登录表单上有一个用于“记住我”的复选框,因此用户可以在登录时为其创建OAuth token 。
  • 成功登录并记住我将会:
  • 查找或创建名称等于用户代理的ClientApplication,并在必要时创建 token
  • 在HTML响应中使用javascript标签进行响应。 javascript代码将调用带有标记作为参数传递的javascript函数。此功能会将OAuth token 保存到LocalStorage。
  • 不成功的OAuth登录尝试将:
  • 在HTML响应中使用javascript标签进行响应。 javascript标记将调用javascript函数以清除OAuth token 的LocalStorage设置。这将防止其他OAuth登录尝试

  • 此过程还有更多细节,如果您需要我可以告诉您更多信息。

    关于javascript - 使用Java安全OAuth,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6144826/

    10-14 17:31