Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Android

ปกป้อง API Keys: แนวทางปฏิบัติที่ดีที่สุดสำหรับแอป Android

สมมติว่าคุณใช้ version control system และโปรเจกต์ของคุณใช้บริการที่ต้องการ API keys ทุกอย่างดูดีเมื่อพวกมันอยู่บนเครื่อง local แต่คุณไม่ต้องการแชร์ API keys เหล่านี้กับโลก

ดังนั้น คุณจะรักษา API keys ให้อยู่ภายในแอปพลิเคชัน แต่ซ่อนพวกมันเมื่อ upload โค้ดไป repository ได้อย่างไร?

คุณน่าจะอยากใช้ API keys ในรูปแบบปกติภายในแอปพลิเคชัน แต่ก็ไม่ต้องการ expose พวกมัน

Secrets คืออะไร?

นี่คือที่ที่ secrets เข้ามา คล้ายกับ秘密ที่คุณเก็บไว้แค่ตัวเอง แตในแบบ developer

Secrets สามารถแทนข้อมูลสำคัญที่แอปพลิเคชันต้องการเพื่อทำงาน แต่ไม่ควรมองเห็นได้โดยใครที่ทำงานนอกโปรเจกต์

เหล่านี้อาจเป็น API keys หรือ authorization tokens แต่ใน essence secret คือข้อมูลการอนุญาตใดๆ ที่ควรใช้โดยคุณและคุณเพียงคนเดียว คล้ายกับที่คุณไม่อยากแชร์รหัสผ่านเว็บไซต์กับใคร

🚨 Disclaimer: โปรดทราบว่าวิธีแก้ในบทความนี้ทำงานสำหรับไม่ expose secrets จาก version control system แต่เพราะพวกมันเป็นส่วนของแอปพลิเคชัน พวกมันยังคงสามารถค้นพบได้โดยการ decompile APK

วิธีเก็บ Secrets ให้ปลอดภัย

ในโปรเจกต์ของคุณ คุณควรมีไฟล์ local.properties ภายใต้ root directory ของโปรเจกต์

เพื่อให้แน่ใจว่ามันถูก ignore โดย version control system เปิดไฟล์ .gitignore และดูว่ามันอยู่ที่นั่น:

ปกป้อง API Keys: แนวทางปฏิบัติที่ดีที่สุดสำหรับแอป Android

คุณจะต้อง import Secrets Gradle plugin เข้าโปรเจกต์

เพื่อทำเช่นนี้ ไปที่ build.gradle ระดับรูทของโปรเจกต์ และวางบรรทัดต่อไปนี้:

buildscript {
  dependencies {
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin' version '2.0.1' apply false
  }
}

ต่อไป ไปที่ build.gradle ของแอป และวางบรรทัดต่อไปนี้:

plugins {
  ...
  id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}

เพิ่ม API key ภายในไฟล์ local.properties:

ปกป้อง API Keys: แนวทางปฏิบัติที่ดีที่สุดสำหรับแอป Android

คุณสามารถใช้ secret ภายใน AndroidManifest.xml โดยเพิ่ม meta-data tag ภายใน application tag:

<application android:allowBackup="true" ..... >
  <activity> .... </activity>
  <meta-data android:name="YOUR_API_KEY_NAME" /// เลือกค่าใดๆ ที่นี่
    android:value="${API_KEY_NAME}"/> /// เขียนชื่อที่คุณตั้งใน local.properties
</application>

เพื่อเข้าถึง API key คุณสามารถใช้ PackageManager เพื่อได้ meta data:

val applicationInfo: ApplicationInfo = application.packageManager
  .getApplicationInfo(application.packageName, PackageManager.GET_META_DATA)
val apiKey = applicationInfo.metaData["YOUR_API_KEY_NAME"]

ทางเลือกอื่น คุณยังสามารถใช้ BuildConfig object ได้:

BuildConfig.YOUR_API_KEY_NAME

แค่นี้ก็เสร็จ ตอนนี้คุณสามารถนอนหลับสบายได้รู้ว่า secrets ของคุณไม่ถูก expose โดย version control system

เพลิดเพลินกับการเก็บ secrets ของคุณ ㊙️

ผมใช้วิธีนี้ในโปรเจกต์ล่าสุดของผม คุณสามารถดูซอร์สโค้ด (ไม่รวม secrets) ได้ที่นี่

และหากคุณอยากดูบทความอื่นๆ ที่ผมเขียน สามารถไปที่นี่

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพนซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานเป็นนักพัฒนา เริ่มต้นเลยวันนี้