在Android上保留OAuth客户端凭据的位置

Abh*_*air 5 android oauth

我有一个通过OAuth安全性与WebAPI交互的Android应用程序.为了获取访问令牌,我需要在请求的标头中发送OAuth凭证(即客户端ID和客户端密钥).我的问题是,我应该在哪里保留这两个值(客户端ID和客户端密码),以便应用程序在需要时使用它.目前,我刚刚在通话中对其进行了硬编码.将它们保存在strings.xml文件中是否安全?

Vij*_*mar 5

隐藏在BuildConfigs中

首先,在根目录中创建一个文件apikey.properties,其中包含不同密钥的值:

CONSUMER_KEY=XXXXXXXXXXX

CONSUMER_SECRET=XXXXXXX

为了避免这些密钥出现在您的存储库中,请确保通过添加到您的文件来排除该文件被签入.gitignore

apikey.properties

接下来,添加此部分以在您的文件中读取该文件app/build.gradle。您还将使用以下定义创建从此文件生成的编译时选项buildConfigField

def apikeyPropertiesFile = rootProject.file("apikey.properties")
def apikeyProperties = new Properties()
apikeyProperties.load(new FileInputStream(apikeyPropertiesFile))

android {

  defaultConfig {

     // should correspond to key/value pairs inside the file   
    buildConfigField("String", "CONSUMER_KEY", apikeyProperties['CONSUMER_KEY'])
    buildConfigField("String", "CONSUMER_SECRET", apikeyProperties['CONSUMER_SECRET'])
  }
}
Run Code Online (Sandbox Code Playgroud)

BuildConfig现在,您可以使用Gradle 提供的对象在源代码中的任何位置访问这两个字段:

// inside of any of your application's code
String consumerKey = BuildConfig.CONSUMER_KEY;
String consumerSecret = BuildConfig.CONSUMER_SECRET;
Run Code Online (Sandbox Code Playgroud)


J.D*_*.D. -6

请用于SharedPreferences存储安全数据,因为如果任何人对您的应用程序进行逆向工程,他们将获得硬编码字符串。SharedPreferences是您可以存储数据的安全位置。

  • 我明白了。但我的问题是,我该如何将客户端 id 和密钥放入共享首选项中而不用代码编写?当用户下载并安装我的应用程序时,他/她将进行网络调用。为了使该网络调用正常工作,需要 oauth 凭据。这意味着我需要将凭据打包在应用程序中。我该怎么办? (4认同)