我创建了一个使用 AppAuth 通过 Google OAuth 进行身份验证的 Android 应用程序。在 Google Cloud Platform Console 中,我为我的应用创建了一个 Android OAuth 2.0 客户端 ID,并提供了应用包名称和签名证书指纹。一切正常。
我想验证只有我的应用程序可以使用该客户端 ID。所以我用不同的包名创建了第二个应用程序,并用不同的签名证书对其进行了签名。使用相同的客户端 ID,我仍然能够通过 Google 进行身份验证并访问 API。我不认为应该是这样。我正在查看 AppAuth 的源代码,它看起来不像在身份验证流程中使用过应用程序签名或包名称。它当然使用 PKCE,但我预计会发生更多。
因此,如果我可以毫不费力地窃取我自己的客户端 ID,那么如何阻止其他人从我的 APK 中提取我的客户端 ID 并将其用于身份验证?我用于重定向 URI 的自定义方案很容易根据我的包名称找出。因此,rouge 应用程序可以配置 AppAuth 以使用类似的重定向 URI 并捕获授权结果。而且由于 PKCE 仅用于验证授权请求和代码交换来自同一个地方,因此一个 rouge 应用程序会同时执行这两种操作,因此那里也没有真正的保护。
我可以将客户端 ID 类型切换为 Web 或其他,但这需要我使用客户端密码,如果将其嵌入应用程序中,这同样不安全。
我是否遗漏了什么,或者 Google OAuth 是否完全按照预期工作?