将 API 密钥保存在 local.properties 文件中以避免版本控制签入

问题描述 投票:0回答:1

我真的需要找出如何保存 API 密钥以避免在公共存储库上暴露敏感密钥。

大多数在线教程建议使用

local.properties
文件来保存 API 密钥,但我在
local.properties
文件顶部看到免责声明 - 请勿修改此文件 - 您的更改将被删除!

我需要生成一个

buildConfigField
来访问主源代码上的密钥;这是我的
build.gradle
应用程序文件中的 Kotlin DSL 代码。

defaultConfig{ ...
val properties = Properties()
        val apiKey: String

        val localPropertiesFile = project.rootProject.file("gradle.properties")
        apiKey = if (localPropertiesFile.exists()) {
            properties.load(localPropertiesFile.inputStream())
            properties.getProperty("API_KEY") ?: ""
        } else {
            System.getenv("API_KEY") ?: ""
        }

        buildConfigField(
                "String",
                "API_KEY",
                "\"$apiKey\""
        )
... }

关于使用

local.properties
保存 api 密钥文件的想法,docs 不同意:

注意:local.properties 文件是为特定属性保留的 到 Android Gradle 插件。将您自己的值放入此文件中可以 造成问题。如果您需要定义自己的本地属性, 创建一个单独的属性文件并手动加载它。

出于纯粹的好奇,我继续将密钥保存在 local.properties 文件中 - 应用程序构建得很好,但 buildConfigField 返回了一个 空字符串

谁知道如何以安全推荐的方式解决这个问题?

android version-control build.gradle
1个回答
0
投票

不要将它们保存在 local.properties 中。正如您提到的,该文件可以被删除。另外,如果你在多个项目中都需要这样的键,你必须不断添加相同的值,这对于 CI 来说是没有用的。相反,请将它们添加到您的环境中并从那里读取它们。同样的方法在 CI 服务器(比如 jenkins)上也是有效的,而且会更安全一些。

从 gradle 读取环境值:

    var auth = if(System.getenv("your_key")!=null){
        println("api key is present!")
        System.getenv("your_key")
    } else {
        println("api key is absent. Set it manually and make sure to not commit it.")
        ""
    }
© www.soinside.com 2019 - 2024. All rights reserved.