GORAGOD.com

freelance, web developer, web designer, hosting, domain name

การรับค่าการพิสูจน์ตัวตน (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) ตามปกติ

หมายเหตุ: จากรูปภาพ ค่า Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= ที่ส่งมาพร้อมกับคำขอ (Request) เป็นผลมาจากการเข้ารหัส Base64 ของข้อมูล username:password

การพิสูจน์ตัวตนแบบ 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 โดยคำนึงถึงความปลอดภัยในการรับส่งข้อมูล.

0SHAREFacebookLINE it!
^