การรับค่าการพิสูจน์ตัวตน (HTTP Authentication) ใน PHP
การพัฒนา API ใน PHP บ่อยครั้งจะต้องมีการส่งค่าการพิสูจน์ตัวตน (Authentication) ไปพร้อมกับคำขอ (Request) ในบทความนี้ เราจะมาศึกษาวิธีการรับค่าการพิสูจน์ตัวตนแบบ HTTP Authentication โดยใช้ PHP ซึ่งครอบคลุมทั้งการพิสูจน์ตัวตนแบบ Basic และ Bearer
การพิสูจน์ตัวตนแบบ Basic Authentication
ในกรณีที่คุณใช้ Basic Authentication คุณสามารถดึงค่าชื่อผู้ใช้และรหัสผ่านได้จากตัวแปร $_SERVER
ดังนี้
- ชื่อผู้ใช้
$_SERVER['PHP_AUTH_USER']
- รหัสผ่าน
$_SERVER['PHP_AUTH_PW']
ตัวอย่างการใช้งาน
$username = $_SERVER['PHP_AUTH_USER']; // ชื่อผู้ใช้
$password = $_SERVER['PHP_AUTH_PW']; // รหัสผ่าน
ค่า $username
และ $password
ที่ได้รับสามารถนำไปตรวจสอบได้ในกระบวนการเข้าสู่ระบบ (Login) ตามปกติ
การพิสูจน์ตัวตนแบบ Bearer
สำหรับการพิสูจน์ตัวตนแบบ Bearer PHP จะไม่สามารถรับค่า Authorization แบบนี้ได้โดยตรง แต่คุณสามารถตั้งค่าใน .htaccess
เพื่อให้ PHP สามารถเข้าถึงค่าดังกล่าวได้ โดยใช้คำสั่งดังนี้
RewriteEngine On
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
ค่าที่ส่งผ่าน Authorization: Bearer <token>
จะถูกส่งต่อไปยังตัวแปร $_SERVER['HTTP_AUTHORIZATION']
โดยอัตโนมัติใน PHP
ตัวอย่างการใช้งาน
$token = $_SERVER['HTTP_AUTHORIZATION']; // Bearer <token>
คุณสามารถนำค่า $token
ที่ได้รับไปตรวจสอบความถูกต้องในขั้นตอนถัดไปได้
การรับค่า Authorization ด้วย apache_request_headers()
อีกวิธีหนึ่งในการรับค่า Authorization คือการใช้ฟังก์ชัน apache_request_headers()
ซึ่งจะดึงค่า Header ทั้งหมดจากคำขอ
if (function_exists("apache_request_headers")) {
$headers = apache_request_headers();
$token = isset($headers['Authorization']) ? $headers['Authorization'] : '';
}
ตัวแปร $headers
จะเก็บข้อมูล Header ทั้งหมดในรูปแบบของอาร์เรย์ ซึ่งถ้ามีค่า Authorization อยู่ จะสามารถเข้าถึงได้ที่ $headers['Authorization']
การตั้งค่า Cross-Domain สำหรับ API
หากคุณต้องการเรียกใช้ API จากโดเมนอื่น คุณจำเป็นต้องตั้งค่าใน .htaccess
เพิ่มเติมเพื่ออนุญาตให้สามารถรับค่า Authorization จากโดเมนอื่นได้
# Cross domain access for API
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, Authorization, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
ตัวอย่างการใช้งาน API พร้อมการตั้งค่า Cross-Domain สามารถดูเพิ่มเติมได้ที่ ตัวอย่างการใช้งาน API ด้วย Kotchasan
สรุป
ในบทความนี้ เราได้เรียนรู้วิธีการรับค่าการพิสูจน์ตัวตนแบบ HTTP Authentication ใน PHP ทั้งแบบ Basic และ Bearer ซึ่งสามารถนำไปใช้งานได้จริงในการพัฒนา API โดยคำนึงถึงความปลอดภัยในการรับส่งข้อมูล.