存储秘密凭据的安全方式
我有一个Android应用程序,我想部署用于商业用途。我正在使用aws秘密凭证,目前我已在代码中对其进行了硬编码。存储秘密凭据的安全方式
有没有任何安全的方式来部署Android应用程序,通过传递凭据作为外部参数。就像我们在服务器应用程序中所做的一样,将凭据作为环境变量传递。我不想在我的代码库中打开秘密密钥。
我想知道是否有任何方式在android应用中做类似的事情。
我发现了下面的方法来传递creds作为envirnoment变量apk在建设时。这些将被存储为构建变量。
在项目目录中创建一个gradle.properties文件,并添加您的凭据:
AWS_CRED=aws_cred
在你gradle这个构建文件,在机器人添加以下内容:
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);
此方法为我工作,如有意见任何人都知道更好的方式来做到这一点。
根据您的设置,有几种方法可以执行此操作。可能最安全的方法是让您的应用程序实例承担所需的权限角色,因此您根本不需要存储凭据。
延伸阅读应该足以让你开始:http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
我会用的Environment variables
而是通过摇篮同样的原则。
这个想法是你的用户文件夹中应该有一个gradle.properties文件,Gradle可以从中拾取属性。这个文件当然不会被添加到源代码控制中。
以后还可以做这样的事情
〜/ .gradle/gradle.properties
projectAwsCred1=cred1
projectAwsCred2=cred2
的build.gradle(APP)
...
buildConfigField "String", "AWS_CRED_1", "\"projectAwsCred1\""
buildConfigField "String", "AWS_CRED_2", "\"projectAwsCred2\""
,然后(建设),你可以在你的代码中调用它像正常Build.AWS_CRED_1
这样,您的凭证就会在您的应用程序中烘焙,但仅限于编译时间。您当然必须在自述文件中记录这些信息,以便其他人(或未来您)知道将地址放在projectAwsCred*
信息中。
感谢您的回答, –
感谢您的回答 –