Javascript 中的安全 OAuth [英] Secure OAuth in Javascript

查看:45
本文介绍了Javascript 中的安全 OAuth的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 api,它使用 OAuth 1.0a 来验证使用它的应用程序.它正在取代一个旧的 api,该 api 使用了许多正在弃用的自定义构建和大杂烩调用.

I have an api which uses OAuth 1.0a to authenticate applications using it. It's replacing an old api which used a number of custom built and hodge-podge calls which are being deprecated.

众所周知,OAuth 1.0a 在(客户端)Javascript 中并不安全,因为它依赖于保密的消费者秘密.这是不可能的,因为源始终可见.

It's well known that OAuth 1.0a is not secure in (client-side) Javascript since it relies on the consumer secret being kept secret. Which is not possible since the source is always viewable.

我们有 Chrome、Firefox、IE 和 Safari 的浏览器扩展,将来需要使用这个 api.这些扩展全部或全部使用 Javascript 编写,因此存在安全问题.

We have browser extensions for Chrome, Firefox, IE and Safari which need to use this api in the future. These extensions are all written largely or entirely in Javascript, and hence the problem of security.

这些扩展是内部的,因此可以使用自定义身份验证方法来获取其访问令牌.

These extensions are in-house and so can have custom authentication methods to get their access tokens.

我计划实施的内容如下:

What I'm planning on implementing is the following:

  • 用户在浏览器中登录网站.
  • 网站向他们发出一个带有会话密钥的 cookie.
  • 然后,我们的扩展程序获取该 cookie 并将其传递给 api.
  • api 验证它是一个有效的 &活动会话并向扩展程序颁发其访问令牌.
  • 这些令牌在到期前最多可使用一小时.
  • 对 javascript 发布的 cookie 也有较低的速率限制.

它在以下假设下运作:

  • 如果另一个应用程序可以访问您的 cookie,那么他们无论如何都可以在网站上冒充您,因此对 api 的访问也不例外.
  • 所有身份验证方法仍由我们控制.
  • 令牌的定期到期意味着,如果它们被泄露,那么利用的时间有限.

我的问题是,这是一种限制访问 api 的安全方法吗?有没有更好的?

My question is, is this a secure method of restricting access to the api? Are there any better ones?

一些注意事项.我知道一个事实,即 chrome 扩展程序可以请求访问给定站点的 cookie 的权限.我相信 Firefox 扩展也可以做到这一点.

A couple of notes. I know for a fact that chrome extensions can ask for permission to access your cookies for a given site. I believe firefox extensions can do so too.

显然,我们不希望我们的 cookie 在任何页面上通过 javascript 访问,否则我们会将自己暴露在 XSS 攻击中,因此它们只需要通过扩展程序访问.

Obviously we don't want our cookies accessible via javascript on any page otherwise we'd expose ourselves to XSS attacks, so they need to only be accessible via extensions.

推荐答案

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

I wrote a site that does OAuth login via javascript library for OAuth. This is the workflow:

  1. OAuth 仅在具有 LocalStorage 的浏览器上受支持
  2. 登录表单将检查 LocalStorage 中的 OAuth 密钥,并在 OAuth 密钥存在时自动尝试 OAuth 登录.
  3. 登录表单上有一个记住我"复选框,因此用户可以在登录时为其创建 OAuth 令牌.
  4. 成功登录并记住我将:
    • 查找或创建名称与 User Agent 相同的 ClientApplication,并在必要时创建令牌
    • 在 HTML 响应中使用 javascript 标记进行响应.javascript 标签将调用一个带有作为参数传递的标记的 javascript 函数.此函数会将 OAuth 令牌保存到 LocalStorage.
  • 在 HTML 响应中使用 javascript 标记进行响应.javascript 标记将调用 javascript 函数来清除 OAuth 令牌的 LocalStorage 设置.这将防止额外的 OAuth 登录尝试

这个过程有更多细节,如果你愿意,我可以告诉你更多.

There is some more detail to this process, I can tell you more about it if you want me to.

这篇关于Javascript 中的安全 OAuth的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆