security - OAuth 2.0 中的客户端 key

标签 security oauth google-api oauth-2.0

要使用 Google Drive api,我必须使用 OAuth2.0 进行身份验证。我对此有一些疑问。

  1. 客户端 ID 和客户端 key 用于识别我的应用程序是什么。但如果是客户端应用程序,则必须对它们进行硬编码。所以,每个人都可以反编译我的应用程序并从源代码中提取它们。 这是否意味着不良应用程序可以通过使用良好应用程序的客户端 ID 和 secret 来冒充良好应用程序?因此,用户将显示一个屏幕,要求向良好应用程序授予权限,即使它实际上是由一个糟糕的应用程序询问的?如果是,我该怎么办?或者实际上我不应该担心这个?

  2. 在移动应用程序中,我们可以将 WebView 嵌入到我们的应用程序中。并且很容易提取webview中的密码字段,因为请求权限的应用程序实际上是一个“浏览器”。 那么,移动应用程序中的 OAuth 没有客户端应用程序无法访问服务提供商的用户凭据的好处吗?

最佳答案

我和这里的问题1有同样的问题,最近自己做了一些研究,我的结论是,不保守“客户 secret ”是可以的。 在 OAuth2 规范中,不保守客户端 secret 的客户端类型称为“公共(public)客户端”。 以下事实可以防止有人恶意获取授权代码和访问 token 的可能性。

1。客户端需要直接从用户而不是服务获取授权码

即使用户指示他/她信任客户端的服务,客户端也无法仅通过显示客户端 ID 和客户端 key 从服务获取授权代码。 相反,客户端必须直接从用户那里获取授权码。 (这通常是通过 URL 重定向来完成的,我将在稍后讨论。) 因此,对于恶意客户端来说,仅仅知道用户信任的客户端 ID/ secret 是不够的。它必须以某种方式涉及或欺骗用户来为其提供授权代码, 这应该比仅仅知道客户端 ID/ secret 更难。

2。重定向 URL 已使用客户端 ID/ secret 注册

假设恶意客户端以某种方式设法让用户参与进来,并让她/他单击服务页面上的“授权此应用程序”按钮。 这将触发从服务到用户浏览器的 URL 重定向响应以及授权代码。 然后授权代码将从用户的浏览器发送到重定向 URL,并且客户端应该监听重定向 URL 以接收授权代码。 (重定向 URL 也可以是 localhost,我认为这是“公共(public)客户端”接收授权代码的典型方式。) 由于此重定向 URL 是使用客户端 ID/ secret 在服务中注册的,因此恶意客户端无法控制向何处提供授权代码。 这意味着拥有您的客户端 ID/ secret 的恶意客户端在获取用户的授权码方面存在另一个障碍。

关于security - OAuth 2.0 中的客户端 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19615372/

相关文章:

C#请求中的web服务密码需要加密

web-services - Cyber​​source 返回安全数据 : No WS-Security Header

oauth - 为什么 MVC 5 Owin Oauth 没有点击/Account/ExternalLoginCallback 操作

javascript - 返回了 Google 距离矩阵 ZERO_RESULTS

api - 如何使用 Google Civic Information API 检索给定位置的国 session 员?

apache - 提供 403 禁止错误的特别敏感的 Mod 安全规则

ios - 寻找一种快速生成 OAuth 1 签名的方法

android - 通过 Rest Server 使用 Facebook 帐户发布到 Drupal

node.js - 是否可以使用 Google 的 Drive API v3 查询多个文件夹(父文件夹)?

php - htaccess 防止直接访问路径并用另一个覆盖