Javascript中的安全OAuth
我有一个api,它使用OAuth 1.0a来验证使用它的应用程序。它正在取代一个旧的api,该api使用了大量的定制和hodge podge调用,这些调用都被弃用 众所周知,OAuth 1.0a在(客户端)Javascript中是不安全的,因为它依赖于保密的消费者机密。这是不可能的,因为源始终可见 我们有用于Chrome、Firefox、IE和Safari的浏览器扩展,将来需要使用此api。这些扩展大部分或全部用Javascript编写,因此存在安全问题 这些扩展是内部的,因此可以使用自定义的身份验证方法来获取访问令牌 我计划实施的内容如下:Javascript中的安全OAuth,javascript,security,oauth,oauth-provider,browser-extension,Javascript,Security,Oauth,Oauth Provider,Browser Extension,我有一个api,它使用OAuth 1.0a来验证使用它的应用程序。它正在取代一个旧的api,该api使用了大量的定制和hodge podge调用,这些调用都被弃用 众所周知,OAuth 1.0a在(客户端)Javascript中是不安全的,因为它依赖于保密的消费者机密。这是不可能的,因为源始终可见 我们有用于Chrome、Firefox、IE和Safari的浏览器扩展,将来需要使用此api。这些扩展大部分或全部用Javascript编写,因此存在安全问题 这些扩展是内部的,因此可以使用自定义的身
- 用户在浏览器中登录网站
- 该网站向他们发布一个带有会话密钥的cookie
- 然后,我们的扩展将该cookie传递给api
- api验证它是否是有效的活动会话,并向扩展发出访问令牌
- 这些代币在到期前最长可使用一小时
- javascript发布的cookie也将有较低的速率限制
- 如果另一个应用程序可以访问您的cookie,那么他们无论如何都可以在网站上模拟您,因此访问api也不例外
- 所有身份验证方法仍由我们控制
- 令牌的定期到期意味着,如果它们被破坏,那么利用它们的时间是有限的
显然,我们不希望在任何页面上通过javascript访问Cookie,否则我们将面临XSS攻击,因此它们只需要通过扩展访问。我编写了一个站点,该站点通过OAuth的javascript库登录OAuth。这是工作流程:
- 查找或创建名称等于User Agent的ClientApplication,必要时创建令牌
- 在HTML响应中使用javascript标记进行响应。javascript标记将使用作为参数传递的标记调用javascript函数。此函数将OAuth令牌保存到LocalStorage
- 在HTML响应中使用javascript标记进行响应。javascript标记将调用javascript函数来清除OAuth令牌的本地存储设置。这将阻止其他OAuth登录尝试
这个过程还有一些细节,如果您愿意,我可以告诉您更多信息。因此您在example.com上有一个网站,它需要访问api.com。扩展假定用户登录到example.com,提取会话cookie并将其传递到api.com以获取Oauth令牌。听起来很合理,但也有更简单的方法,不必编写浏览器插件 在您的例子中,api.com将与example.com通信以验证会话cookie。这两个系统之间有很强的依赖性。OAuth通常用于example.com和api.com互不信任的地方 由于这两个系统彼此之间已经有了某种信任,您可以做各种事情来简化体系结构:
对于那些后来来到这篇文章的人,我有几点想法: