(GCP) API 密钥。您的应用包含公开的 Google Cloud Platform (GCP) API 密钥

Kam*_*mar 13 google-cloud-platform android-security google-play-console

在 Google Play 商店控制台中上传构建时出现错误。错误如下。

泄露的 GCP API 密钥 您的应用程序包含泄露的 Google Cloud Platform (GCP) API 密钥。

罪魁祸首代码如下。

Places.initialize(getApplicationContext(), BuildConfig.GOOGLE_API_KEY);
Run Code Online (Sandbox Code Playgroud)

根据文档,我正在从 BuildConfig 读取密钥并限制该密钥。但仍然是同样的问题。我该如何解决这个问题..

Mil*_*aji 21

我也面临同样的问题。我找不到任何合适的解决方案。经过大量搜索后我找到了解决方案。所以我针对这个问题给出了一个完整的指南。非常感谢Prasenjit Banerjee对我的帮助。

使用 API 密钥并避免Google Play 控制台中泄露的 GCP API 密钥安全问题的完整指南:

  1. 首先,您需要遵循API 安全最佳实践来添加限制并安全地使用 API 密钥。

  2. 然后按照设置 Android Studio 项目添加 API 密钥并在主程序local.properties中使用它们。AndroidManifest.xml

  3. 最后访问 API 密钥作为文件中的变量AndroidManifest.xml

<application>
        .
        .
        .
        .        
        <activity>
            .
            .
            .
            .
        </activity>
  
    <meta-data
        android:name = "keyValue"
        android:value = "${KEY}"/>
      
</application>
Run Code Online (Sandbox Code Playgroud)
  1. 访问 API 密钥并MainActivity.kt输入以下代码以从元数据中获取 KEY 值AndroidManifest.xml(从GeeksforGeeks中的本文中查找解决方案): 注意:不要使用类来获取这些 API 密钥,因为此类将这些属性公开为变量。

    BuildConfig
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //get the KEY value from the meta-data in AndroidManifest
        val ai: ApplicationInfo = applicationContext.packageManager
            .getApplicationInfo(applicationContext.packageName, PackageManager.GET_META_DATA)
        val value = ai.metaData["keyValue"]
        val key = value.toString()

        //for testing only
        Toast.makeText(applicationContext, key, Toast.LENGTH_LONG).show()

        // use this key to initialize places sdk
        Places.initialize(applicationContext, key)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下这到底实现了什么吗?我所看到的是您将 API 密钥从一个可公开访问的位置移至另一个位置。访问清单条目就像读取 BuildConfig 变量一样简单。 (2认同)