mac*_*ery 32 oauth-2.0 google-oauth hello.js
我是OAuth2的新手,虽然研究仍然无法掌握,但我一直在努力解决这个问题.
为OAuth2创建JS客户端的难点在于您无法存储客户端密钥,因为它可以在浏览器中广泛访问.即在这个问题中,评价最高的评论说:
"我认为tokenSecret和consumerSekret参数应该是秘密的!下载到浏览器时它们怎么能保密?!!!"
因此,像hello.js或oauth.io这样的客户端OAuth2框架如何解决这个问题呢?我知道他们使用服务器端代理(知道ID和秘密)来处理他们的请求,但是客户端JS代码仍然需要以某种方式告诉代理人它是谁.那么是什么阻止任何人从我的网站上获取JS代码并代表我与代理交谈?
我还找到了适用于JavaScript的Google API客户端库.AFAIK那里的客户端代码没有传递秘密.我是否正确理解他们是通过预定义的OAuth响应地址来管理的?(以便始终通过预定义的HTTP地址返回令牌).因此,即使有人试图通过使用我的ID来冒充我的网站,令牌仍将返回我的网站?
也许我在这里混淆了一些不同的主题,关于这个主题的任何亮点都会受到赞赏.
Eug*_*ace 21
OAuth2中的流程不需要保密(例如,implicit流程通常用于基于JS的客户端,SPA等).并非所有提供程序都支持此流程,因此在这些情况下,您需要一个服务器端组件,为您协商,然后处理与前端/设备的交互.
无论如何,您需要用户进行身份验证.该secret验证客户端(您的应用程序),而不是用户.返回URL(或回调)保护令牌在其他地方(仅限您的应用程序)发布.
这些流程的示例如下:https://docs.auth0.com/protocols#5
更新: "公共客户端"有一个特定的代码/令牌交换协议,增加了额外的安全性:PKCE(它是如何工作的:https://auth0.com/docs/protocols#oauth2-pkce-for-public-clients )
如果使用JS客户端,则Google会验证JS来源是否与使用客户端ID注册的JS匹配。因此,如果某人使用其他人的客户ID,那么他们最多只能为自己拥有的帐户获得令牌(这不会很有用)。
通常,您永远无法知道谁(或什么客户端)(或代码)正在与服务器通信。您只会看到他们发送的数据。因此,如果其他客户端/代码发送了相同的数据包,则您将无能为力,而且通常您无需理会。您应该注意在请求中是否具有适当的凭据。
| 归档时间: |
|
| 查看次数: |
19877 次 |
| 最近记录: |