(GCP)API密钥.您的应用程序包含公开的谷歌云平台(GCP)API密钥



在google play商店控制台中上传构建时出错。错误如下。

GCP API密钥泄漏您的应用程序包含公开的谷歌云平台(GCP(API密钥。

罪魁祸首代码如下。

Places.initialize(getApplicationContext(), BuildConfig.GOOGLE_API_KEY);

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

我也面临同样的问题。我找不到任何合适的解决方案。经过大量搜索,我找到了解决方案。因此,我将为这个问题提供一个完整的指南。非常感谢Prasenjit Banerjee对我的帮助。

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

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

  2. 然后按照设置Android Studio项目将API密钥添加到CCD_ 1并在CCD_;主程序。

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

<application>
.
.
.
.        
<activity>
.
.
.
.
</activity>

<meta-data
android:name = "keyValue"
android:value = "${KEY}"/>

</application>
  1. 访问MainActivity.kt中的API密钥,并键入以下代码以从AndroidManifest.xml中的元数据中获取密钥值(在GeeksforGeeks中查找本文中的解决方案(:

    注意:不要使用BuildConfig类获取这些API键,因为此类将这些属性公开为变量
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)
}
}

为了在GCP中保护您的API密钥,您必须搜索;凭证";在云平台控制台中。使用"创建凭据"按钮创建一个新的API密钥,其配置与受损的API密钥相同。API密钥上的限制必须匹配,否则可能会出现中断。

将API密钥推送到使用旧密钥的所有位置,然后删除旧密钥。


我建议您查看GCP中提交受损凭证的官方文件,以获得更好的细节。

除此之外,您可能需要考虑通过利用工作负载识别联盟进行免钥匙API身份验证

您不应该直接从BuildConfig从本地属性获取GCP密钥。我通过使用这个扩展函数从应用程序元数据中获取密钥来修复它

fun Context.getKey(): String {
val applicationInfo = packageManager
.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val keyValue = applicationInfo.metaData?.get("com.google.android.geo.API_KEY")
return keyValue.toString()
}

因此,当你想获得密钥时,你可以使用

  1. 片段
Places.initialize(getApplicationContext(), requireContext().getKey());
  1. 活动
Places.initialize(getApplicationContext(), this.getKey());

最新更新