存储秘密凭证的安全方式

Atu*_*mar 3 security android environment-variables firebase-security

我有一个 android 应用程序,我想将其部署为商业用途。我正在使用 aws 秘密凭证,目前我已在代码中对其进行了硬编码。

通过将凭据作为外部参数传递,是否有任何安全的方式来部署 Android 应用程序。就像我们在服务器应用程序中所做的一样,将凭据作为环境变量传递。我不想在我的代码库中打开密钥。

我想知道是否有任何方法可以在 android 应用程序中做类似的事情。

lin*_*kis 5

我会使用相同的原则,Environment variables但通过 Gradle。

这个想法是你的用户文件夹中应该有一个gradle.properties文件,Gradle 可以从中获取属性。当然,这个文件不会被添加到源代码管理中。

你可以做这样的事情

~/.gradle/gradle.properties

projectAwsCred1=cred1
projectAwsCred2=cred2
Run Code Online (Sandbox Code Playgroud)

build.gradle(应用程序)

...
buildConfigField "String", "AWS_CRED_1", "\"projectAwsCred1\""
buildConfigField "String", "AWS_CRED_2", "\"projectAwsCred2\""
Run Code Online (Sandbox Code Playgroud)

然后(构建后)您可以像往常一样在代码中调用它 Build.AWS_CRED_1

这样,您的凭据将在您的应用程序中烘焙,但仅限于构建时。您当然必须在自述文件中记录这一点,以便其他人(或将来的您)知道是否放置了projectAwsCred*信息。


Atu*_*mar 0

我发现以下方法可以在构建时将信用作为环境变量传递给 apk。这些将存储为构建变量。

在您的项目目录中创建一个 gradle.properties 文件并添加您的凭据:

AWS_CRED=aws_cred
Run Code Online (Sandbox Code Playgroud)

在你的 gradle 构建文件中,在 android 下添加以下内容:

android {
defaultConfig{
manifestPlaceholders=[AWS_CRED:AWS_CRED]
}
}
Run Code Online (Sandbox Code Playgroud)

它的作用是将构建变量传递到您的 Android 清单。现在转到 AndroidManifest.xml 并在标签下添加以下内容:

<application
<meta-data
            android:name="AWS_CRED"
            android:value="${AWS_CRED}" />
</application>
Run Code Online (Sandbox Code Playgroud)

现在在任何java代码中访问 的值,如下所示:

applicationInfo = getApplicationContext().getPackageManager().getApplicationInfo(getApplicationContext().getPackageName(), PackageManager.GET_META_DATA);
Run Code Online (Sandbox Code Playgroud)

这个方法对我有用,如果有人知道更好的方法,请评论。