Android 具有隐式授权的OAuth应用程序中的客户端模拟

Android 具有隐式授权的OAuth应用程序中的客户端模拟,android,ios,facebook,security,oauth,Android,Ios,Facebook,Security,Oauth,从OAuth草稿中,隐含: 在隐式授权流期间发出访问令牌时 授权服务器不验证客户端 现在,让我们假设: 我有一个Android或iOS应用程序 我使用OAuth隐式授权来获取对某些资源的访问令牌。这将通过web视图实现 用户授权我的应用程序访问某些资源。这意味着: 他在拥有资源的原始服务中经过身份验证 网络视图将有一个他在那里的会话 有一个恶意Android或iOS应用程序正试图使用我在应用程序()中使用的相同客户端id获取访问令牌。他还拥有相同的redirect_uri,在本机应用程序中可以

从OAuth草稿中,隐含:

在隐式授权流期间发出访问令牌时 授权服务器不验证客户端

现在,让我们假设:

  • 我有一个Android或iOS应用程序
  • 我使用OAuth隐式授权来获取对某些资源的访问令牌。这将通过web视图实现
  • 用户授权我的应用程序访问某些资源。这意味着:
  • 他在拥有资源的原始服务中经过身份验证
  • 网络视图将有一个他在那里的会话
  • 有一个恶意Android或iOS应用程序正试图使用我在应用程序()中使用的相同
    客户端id
    获取访问令牌。他还拥有相同的
    redirect_uri
    ,在本机应用程序中可以是类似于
    fb://blablabla
    的任何东西
  • 据我所知,这个恶意应用程序也可以使用web视图获取最初属于我的
    客户端id
    的访问令牌。由于3.1和3.2的原因,这是因为用户甚至没有意识到他正在使用的
    客户端id
    ,这是我的
  • 他可以用它做一些有害的事情,除了我的客户由于过度使用而不得不进行的速率限制(在一些提供商,如FB和Twitter)

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

    您的第一句话:

    恶意客户端可以模拟其他客户端并获得访问权限
    对于受保护的资源,如果模拟客户端失败,或者是
    无法对其客户端凭据保密


    我想这是唯一的办法。此外,也许你可以对你的客户ID进行加密,加密存储并解密,然后再对用户进行身份验证。

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

    另一方面,我不是移动开发者,所以我不知道“神奇链接”是如何工作的,但我认为如果两个应用程序定义相同的url(重定向uri),它将失败,但这只是我值得检查的理由