存储秘密凭证的安全方式

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

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

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

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

android security environment-variables firebase-security
4个回答
6
投票

我会使用与

Environment variables
相同的原理,但通过 Gradle。

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

你可以做这样的事情

~/.gradle/gradle.properties

projectAwsCred1=cred1
projectAwsCred2=cred2

build.gradle(应用程序)

...
buildConfigField "String", "AWS_CRED_1", "\"projectAwsCred1\""
buildConfigField "String", "AWS_CRED_2", "\"projectAwsCred2\""

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

Build.AWS_CRED_1

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

projectAwsCred*
信息。


0
投票

根据您的设置,有多种方法可以执行此操作。最安全的方法可能是让您的应用程序实例承担具有所需权限的角色,这样您就根本不需要存储您的凭据。

进一步阅读应该足以让您开始:http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html


0
投票

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

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

AWS_CRED=aws_cred

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

android {
defaultConfig{
manifestPlaceholders=[AWS_CRED:AWS_CRED]
}
}

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

<application
<meta-data
            android:name="AWS_CRED"
            android:value="${AWS_CRED}" />
</application>

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

applicationInfo = getApplicationContext().getPackageManager().getApplicationInfo(getApplicationContext().getPackageName(), PackageManager.GET_META_DATA);

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


0
投票

这是我对我所做的。

首先,我在

gradle.properties
下创建了一个全局
~\.gradle
文件。请注意,它位于我的用户文件夹中,而不是项目的根目录中,因为该目录必须包含在 git 中。

然后,我在那里写下了我的密钥:

apiKey=83hfidf8uf

在我的应用程序模块的

build.gradle.kts

我通过使用此属性委托引用了密钥:

val apiKey: String by project

注意

gradle.properties
键和
build.gradle.kts
变量名必须相同。

然后,我将其添加到我的默认配置中

buildConfigField("String", "API_KEY", apiKey)

然后,我将其添加到我的 buildFeatures 中

buildConfig = true

然后,我在源代码中引用它,如下所示

BuildConfig.API_KEY
© www.soinside.com 2019 - 2024. All rights reserved.