如何不使用 Javascript OAuth 库公开您的密钥?
Posted
技术标签:
【中文标题】如何不使用 Javascript OAuth 库公开您的密钥?【英文标题】:How it is possible to not expose you secret key with a Javascript OAuth library? 【发布时间】:2012-01-21 04:20:00 【问题描述】:看着Twitter OAuth Libraries,我看到了这个注释:
将 javascript 与 OAuth 结合使用时要小心。不要暴露你的密钥。
然后,查看jsOAuth examples,我注意到密钥暴露在代码中。
所以我的问题是:当您在 Javascript 中使用 OAuth 库时,如何不暴露您的密钥?
谢谢。
更新:好的,也许 jsOAuth 不是正确使用的库,但是如何在完整的 Javascript 网站上使用 OAuth 进行身份验证?
【问题讨论】:
您应该将其标记为已解决并发布新问题,而不是向该线程添加新问题,尤其是问题不太相似。您的后续问题的答案可在此处找到:Secure OAuth in Javascript 我的问题的标题没有改变。也许你想让我删除 jsOAuth 注释 已经接受 refp 的回答... :) 【参考方案1】:您还可以编写一个脚本,将所有必要的值和参数发送到服务器以进行签名。
然后可以将签名的 URL 发送回客户端(浏览器),然后由其执行实际请求。
我已经使用 jsonp 请求在 Twitter API 上实现了 OAuth 1.0a。 这样做的好处是响应正文不会通过您的服务器中继,从而节省带宽。
这样你就可以吃饼干了。
【讨论】:
【参考方案2】:目前,在浏览器中执行 OAuth 1 的唯一真正合理的方法是通过您的服务器路由 API 调用。
据我所知,根本没有办法解决这个问题。如果您通过浏览器中的 JavaScript 进行 OAuth 1.0a 调用 -> 您将必须至少向最终用户公开您的消费者密码和访问令牌密码。
您不能将这些凭据存储在:
一个cookie,用户可以找到它们。 本地存储,用户可以找到它们(虽然比 cookie 更好,因为它不需要一直通过 HTTP 来回发送 cookie) 在 javascript 中,用户可以找到它们(尽管这可能是您最好的选择,因为它更容易隐藏)。如果只是向最终用户公开了访问令牌秘密,那将是可以忍受的——因为实际上是他/她对您的应用程序进行了身份验证。但是丢失你的消费者秘密真的没有那么热,这意味着你的应用程序有资格被盗用身份。即其他人可以编写一个声称是您的应用的应用。
即使你让它在浏览器中安全运行,你也会受到跨域安全块的阻碍。
【讨论】:
【参考方案3】:如您链接的文档中所述:
jsOAuth 用 JavaScript 编写,旨在成为一个功能齐全的开源 OAuth 库,用于 Adobe AIR、Appcelerator Titanium 和 PhoneGAP。事实上,任何可以使用 javascript 并且具有跨域 XMLHttpRequests 的地方。 出于安全原因,jsOAuth 不在浏览器中运行。此处仅提及用于运行测试套件的浏览器。如果你需要浏览器中的jsOAuth,写一个扩展。
您添加的问题的一个很好的答案可以在这里找到:
Secure OAuth in Javascript【讨论】:
以上是关于如何不使用 Javascript OAuth 库公开您的密钥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用库的情况下验证本机 Javascript 中的 Azure OAuth 访问 JWT 令牌?
使用 OAuth 和 javascript 的应用程序 [关闭]
使用 OAuth 和 javascript 的应用程序 [关闭]
保护 oauth 不记名令牌免受 javascript 应用程序中的 XSS、CSRF 等攻击
如何使用 Oauth2 和 javascript 客户端(Spring Oauth2 + Angularjs)实现长期登录会话