การกำหนด API Key ในโปรเจคแอนดรอยด์มักจะพบได้ในเวลาที่ต้องการใช้งาน 3rd Party Service เพื่อให้แอปของนักพัฒนาสามารถเรียกใช้ความสามารถจาก SDK หรือ Service เหล่านั้นได้
ไม่ว่าจะเป็น SDK, API, หรือ Service ก็ตาม บทความนี้ขอเรียกรวมกันว่า 3rd Party Service
บทความที่เกี่ยวข้อง
- การใช้งาน 3rd Party Service ด้วย API Key ที่นักพัฒนาแอนดรอยด์ควรรู้ [Now Reading]
- เลิกใส่ Public API Key ไว้ในโปรเจคแล้วเปลี่ยนมาใช้ Secrets Gradle Plugin กัน
โดย API Key ที่ใช้งานกันในทุกวันนี้สามารถแบ่งได้เป็น 2 แบบคือ Public API Key กับ Private API Key
Public API Key
เป็น API Key สามารถเปิดเผยให้คนอื่นเห็นได้ เพราะมีการกำหนดค่าบางอย่างเพื่อให้ใช้งานเฉพาะแอปที่กำหนดเท่านั้น
ยกตัวอย่างเช่น Google Maps SDK ที่จะต้องกำหนด Restriction ด้วยการใส่ Fingerprint ของ Keystore Certificate ไว้บน Google Cloud Console ด้วย ถ้าคนอื่นได้ API Key ไปก็เอาไปใช้งานไม่ได้ เพราะ API Key ตัวนั้นต้องใช้กับแอปของเราเท่านั้น
โดย 3rd Party Service ที่สร้างขึ้นมาเพื่อใช้งานบนแอนดรอยด์โดยเฉพาะ ก็จะใช้เป็น Public API Key กันซะส่วนใหญ่ ทำให้นักพัฒนาสามารถนำไปกำหนดไว้ในโปรเจคเพื่อใช้งานได้เลย
นอกจากนี้ 3rd Party Service บางตัวอาจจะมีการแบ่ง Public API Key ย่อยเป็นอีก 2 แบบคือ Development Key กับ Production Key โดยให้ Development Key ทำอะไรได้มากกว่าเพื่อเป็นอำนวยความสะดวกในระหว่างการพัฒนาแอป ส่วน Production Key เป็น API Key สำหรับใช้งานจริงที่จะทำได้แค่บางอย่างเท่านั้น ซึ่งกรณีแบบนี้ก็ไม่ควรปล่อยให้ Development Key หลุดออกไปสู่ภายนอก ควรจะเป็น Production Key เท่านั้น
Private API Key
เป็น API Key ที่ไม่ควรหลุดออกไปสู่ภายนอก ถ้าใครได้ไปก็สามารถนำไปใช้งานได้ทันที เพราะไม่สามารถกำหนดได้ว่าจะให้ใช้งานได้เฉพาะแอปของเราเท่านั้น
Private API Key เป็น API Key ที่ไม่ควรนำมาใช้งานกับแอปบนแอนดรอยด์เด็ดขาด เพราะมีโอกาสที่แอปของเราจะถูก Reverse Engineering และทำให้ Private API Key หลุดออกไปได้
ดังนั้นถ้าจำเป็นต้องใช้ 3rd Party Service ที่เป็น Private API Key ควรให้ Web Service เป็นคนเรียกใช้งานแทน แล้วค่อยส่งข้อมูลที่ต้องการมาให้ Mobile App
ถึงแม้นักพัฒนาเข้ารหัส Private API Key เพื่อเก็บไว้ในโปรเจคได้ แต่ก็จะมีโอกาสที่คนอื่นสามารถถอดรหัสและได้ Private API Key ไปอยู่ดี ดังนั้นการป้องกันที่ดีที่สุดก็คือการไม่เก็บ Private API Key ไว้ที่ฝั่ง Mobile App ตั้งแต่แรก
สรุป
เป็นเรื่องปกติสำหรับการใช้งาน 3rd Party Service บางตัวที่จำเป็นต้องมีการเชื่อมต่อกับ Web Service ของผู้ให้บริการเหล่านั้น และการใช้ API Key ก็เป็นหนึ่งในมาตรฐานที่นิยมใช้กัน
และนักพัฒนาแอนดรอยด์ก็ควรรู้ด้วยว่า API Key ที่ต้องการใช้งานนั้นเป็นแบบไหน ถ้าเป็น Public API Key ก็อย่าลืมกำหนดค่าอย่างอื่นเพิ่มเติมเพื่อให้ใช้งานได้เฉพาะแอปของนักพัฒนาเท่านั้น (มักจะมีอธิบายไว้ใน Documentation ของ 3rd Party Service)
แต่ถ้าเป็น Private API Key ก็ควรออกแบบการทำงานของ Mobile App ร่วมกับ Web Service เพื่อให้ Web Service เป็นคนถือ API Key และเรียกใช้งาน 3rd Party Service ให้แทน