要使用 google Drive api,我必须使用 OAuth2.0 进行身份验证。我对此有一些疑问。
客户端 ID 和客户端密钥用于识别我的应用程序是什么。但如果是客户端应用程序,则必须对它们进行硬编码。所以,每个人都可以反编译我的应用程序并从源代码中提取它们。这是否意味着一个坏应用程序可以通过使用好应用程序的客户端 ID 和密钥来冒充好应用程序?因此,用户会显示一个屏幕,要求向一个好的应用程序授予权限,即使它实际上是由一个坏的应用程序请求的?如果是,我该怎么办?或者实际上我不应该担心这个?
在移动应用程序中,我们可以将网络视图嵌入到我们的应用程序中。而且在webview中提取密码字段很容易,因为请求权限的应用程序实际上是一个“浏览器”。那么,移动应用程序中的 OAuth 没有客户端应用程序无法访问服务提供商的用户凭据的好处吗?
我和问题1有同样的问题,最近自己做了一些研究,我的结论是,不保守“客户秘密”是可以的。
在 OAuth2 规范中,不保守客户端机密的客户端类型称为“公共客户端”。
以下事实可以防止有人恶意获取授权代码和访问令牌的可能性。
1. 客户端需要直接从用户处获取授权码,而不是从服务处获取
即使用户表明他/她信任客户端的服务,客户端也无法仅通过显示客户端 ID 和客户端密钥从服务获取授权代码。
相反,客户端必须直接从用户那里获取授权码。 (这通常是通过 URL 重定向来完成的,我将在稍后讨论。)
因此,对于恶意客户端来说,仅仅知道用户信任的客户端 ID/秘密是不够的。它必须以某种方式涉及或欺骗用户来为其提供授权代码,
这应该比仅仅知道客户端 ID/秘密更难。
2. 使用客户端 ID/秘密注册重定向 URL
我们假设恶意客户端以某种方式设法让用户参与并让她/他单击服务页面上的“授权此应用程序”按钮。
这将触发从服务到用户浏览器的 URL 重定向响应以及授权代码。
然后授权代码将从用户的浏览器发送到重定向 URL,并且客户端应该监听重定向 URL 以接收授权代码。
(重定向 URL 也可以是 localhost,我认为这是“公共客户端”接收授权代码的典型方式。)
由于此重定向 URL 是使用客户端 ID/秘密在服务中注册的,因此恶意客户端无法控制向何处提供授权代码。
这意味着拥有您的客户端 ID/秘密的恶意客户端在获取用户的授权码方面存在另一个障碍。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)