[Spring boot] มาเก็บ Secrets Properties ให้ปลอดภัยกันเถอะ 🤗

Rungroj_hs
SET-IT-TEAM
Published in
Mar 30, 2023

สวัสดีครับเพื่อนๆ^^ วันนี้ผมจะมาเแนะนำวิธีการเก็บ secret properties แบบง่ายๆและปลอดภัยครับ

การพัฒนาแอพพลิเคชั่นเราจะต้องเจอกับ secret properties มากมาย เช่น ใช้ในการ authentication สำหรับเรียกใช้งาน public api หรือการเชื่อมต่อกับ service อื่นๆที่มีระบบตรวจสอบผู้ใช้งาน ดังนั้นใน application ของเราจึงจำเป็นที่จะต้องมีการเก็บ secret properties เอาไว้

ในการเก็บ properties สามารถเก็บได้หลายวิธี ซึ่งผมจะขอยกตัวอย่าง 2 วิธีหลักๆ ที่พบเจอได้ในการพัฒนาแอพพลิเคชั่นด้วย spring boot

  1. การเก็บ properties ไว้ในไฟล์ application.properties โดยวิธีนี้จะเป็นวิธีที่ง่ายที่สุด สามารถเรียกใช้ค่าผ่าน @Value ของ springboot ได้โดยตรง แต่ก็แลกมาด้วยความปลอดภัยที่ต่ำ เนื่องจากไฟล์ application.properties นั้นจำเป็นต้องเก็บไว้บน git สำหรับใช้ในการ build application
เก็บ secrets properties ไว้ในไฟล์ application.properties

2. การสร้างไฟล์ใหม่มาสำหรับเก็บ properties เรียกใช้โดยการเขียนฟังก์ชันมาอ่านไฟล์ ซึ่งวิธีนี้จะปลอดภัยมากกว่าวิธีแรก แต่ต้องแลกมาด้วยการเขียนฟังก์ชันที่มากขึ้น การเรียกใช้งานที่มีความซับซ้อนกว่าเดิม

เก็บ secrets properties ในรูปแบบ json file

ดังนั้นในบทความนี้ผมจะพาไปลองใช้ @EnableConfigurationProperties และ @ConfigurationProperties 2 ตัวนี้ช่วยให้เราสามารถเก็บ secrets properties ต่างๆได้ง่ายมากยิ่งขึ้น มีลักษณะการทำงานเปรียบเสมือนการรวมเอา 2 วิธีทางด้านบนมาประยุกต์ใช้งานร่วมกันครับ

Getting Started …

เริ่มจากการสร้างไฟล์แยกสำหรับเก็บ secrets properties

  1. สร้าง Class สำหรับเก็บ properties ที่เราต้องการใช้ โดยเรียกใช้ @ConfigurationProperties(“ใส่ prefix ให้ตรงกับที่กำหนดไว้ในไฟล์ ในกรณีนี้คือ com.example”)
สร้างตัวแปรสำหรับเก็บ properties ที่เราต้องการใช้

2. เรียกใช้ @EnableConfigurationProperties ระบุชื่อ Class ที่เราต้องการ inject properties

3. เพิ่มชื่อไฟล์ที่เราเก็บ properties เอาไว้ที่ application.properties (file ->secrets properties)

4. เพิ่มไฟล์​ secrets.properties ที่ไฟล์ .gitignore เพื่อไม่ให้นำไฟล์นี้ขึ้นไปที่ git

5. นำไฟล์​ secrets.properties ไปวางบน Server….

เพียงเท่านี้เราก็สามารถเรียกใช้ properties จากไฟล์ได้โดยตรงไม่จำเป็นต้องใช้ฟังก์ชันในการอ่านไฟล์และดึงค่าออกมาอีกแล้วครับ

I hope that it was useful to you… Bye Bye 😁

--

--