2

来自 OAuth 草案,隐含部分

在隐式授权流程期间发布访问令牌时,授权服务器不会对客户端进行身份验证。

现在,让我们假设:

  1. 我有一个 Android 或 iOS 应用程序。
  2. 我使用 OAuth 隐式授权来获取对某些资源的访问令牌。这将通过网络视图发生。
  3. 用户授权我的应用访问某些资源。这表示:
  4. 他在具有该资源的原始服务中进行了身份验证。
  5. 并且网络视图将在那里对他进行会话。
  6. 有一个恶意的 Android 或 iOS 应用程序试图使用client_id我在我的应用程序中使用的相同(客户端模拟)获取访问令牌。他也有相同redirect_uri的东西,在原生应用程序中可以是fb://blabla.
  7. client_id据我了解,这个恶意应用程序也可以使用 Web 视图获取原本属于我的访问令牌。发生这种情况是因为用户甚至不会意识到client_id他正在使用,这是我的,由于 3.1 和 3.2。
  8. 他可以用它做有害的事情,除了我的客户由于过度使用而不得不进行的速率限制(在几个提供商,如 FB 和 Twitter 中)。

有什么办法可以防止这种情况发生吗?

4

2 回答 2

0

链接中的第一条语句:

如果被冒充的客户端未能或 无法对其客户端凭据保密,则恶意客户端可以冒充另一个客户端并获得
对受保护资源的访问权限。

我想这是唯一的方法。此外,也许您可​​以在您的 clientId 上应用一些加密,将其加密存储并仅在验证用户之前对其进行解密。

于 2013-09-27T11:44:56.417 回答
0

这是一个老问题,但我还是会试一试。隐式流本质上是一个不太安全的流,只有当您无法安全地保存客户端 ID 和机密并像在单页应用程序中一样执行代码流(混合流)时,才应使用移动应用程序和/或 Web 应用程序服务器端建议使用代码流来防止这种模拟。

现在换个说法,我不是移动开发人员,所以我不知道“魔术链接”是如何工作的,但我认为如果 2 个应用程序将定义相同的 url(用于重定向 uri),它将失败,但这只是我推理值得检查...

于 2019-09-02T14:04:11.627 回答