1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php // send some CORS headers so the API can be called from anywhere header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); /*Access-Control-Allow-Origin: อนุญาต domain-a.com ให้สามารถเรียกข้อมูลได้ Access-Control-Allow-Methods: อนุญาต Methods ที่ใช้เรียกข้อมูลได้ Access-Control-Allow-Headers: อนุญาต Headers ที่ใช้เรียกข้อมูลได้ หากต้องการอนุญาตให้ทุกโดเมนสามารถเข้าถึงแหล่งข้อมูลได้ดังนี้ Access-Control-Allow-Origin: ‘*’ */ $requestMethod = $_SERVER["REQUEST_METHOD"]; //Basic Authorization $api_credentials = array( 'nathan' => 'bc46', 'user2' => 'abcxyz' ); if (!isset($_SERVER['PHP_AUTH_USER'])) { $return[] = array('status'=>'fail','message'=>'Unauthorized'); }else{ $username = $_SERVER['PHP_AUTH_USER']; // username $password = $_SERVER['PHP_AUTH_PW']; // password if (!array_key_exists($username, $api_credentials)) { $return[] = array('status'=>'fail','message'=>'Unauthorized : You need a valid user and password.'); echo json_encode($return); exit(); } if ($password != $api_credentials[$username]) { $return[] = array('status'=>'fail','message'=>'Unauthorized : You need a valid user and password.'); echo json_encode($return); exit(); } $return[] = array('status'=>'success','message'=>'Successful authentication'); //some code $return['data'] = array(); // } echo json_encode($return); ?> |
ปกติแล้ว PHP จะไม่สามารถรับค่า Authorization แบบ Bearer ได้โดยตรง เพื่อความปลอดภัย แต่เราสามารถกำหนดค่าที่ .htaccess เพื่อรีไดเร็คค่านี้ไปยัง PHP ได้
1 2 |
RewriteEngine On RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last] |
และรับค่าเป็น
1 2 |
$token = $_SERVER['HTTP_AUTHORIZATION']; // Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274 |
การรับค่า Authorization ของ PHP ยังมีอีกวิธีที่สามารถรับได้ ถ้า Server รองรับ คือการรับค่าด้วยฟังก์ชั่น apache_request_headers() ดังตัวอย่าง
1 2 3 4 |
if (function_exists("apache_request_headers")) { $headers = apache_request_headers(); $token = isset($headers['Authorization']) ? $headers['Authorization'] : ''; } |
ตัวอย่าง Bearer Authorization 🔥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php // send some CORS headers so the API can be called from anywhere header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); /*Access-Control-Allow-Origin: อนุญาต domain-a.com ให้สามารถเรียกข้อมูลได้ Access-Control-Allow-Methods: อนุญาต Methods ที่ใช้เรียกข้อมูลได้ Access-Control-Allow-Headers: อนุญาต Headers ที่ใช้เรียกข้อมูลได้ หากต้องการอนุญาตให้ทุกโดเมนสามารถเข้าถึงแหล่งข้อมูลได้ดังนี้ Access-Control-Allow-Origin: ‘*’ */ $requestMethod = $_SERVER["REQUEST_METHOD"]; $token = ''; if (function_exists("apache_request_headers")) { $headers = apache_request_headers(); $authHeader = isset($headers['Authorization']) ? $headers['Authorization'] : ''; preg_match('/Bearer\s(\S+)/', $authHeader, $matches); if(! isset($matches[1])) { return false; } $token = $matches[1]; //authenticateRemotely($token); //ตรวจสอบการ authen นำไปพัฒนา function การตรวจสอบต่อ } $return[] = array('token'=>$token); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<?php function cURL($mode="POST",$url=NULL,$params=array(),$opts=array()){ if ($mode == "") { $mode = "POST"; } if(isset($mode) && strtoupper($mode) == "GET"){ //หากส่งมาเป็นแบบ GET ให้ใช้ Query_str $query_str = ""; if(count($params)>0){ foreach ($params as $key => $value) { if($query_str != ""){ $query_str .= "&"; } $query_str .= $key."=".urlencode($value); } } if($query_str != ""){ $url .= "?".$query_str; } }else{ $params = http_build_query($params); //แปลง array() เป็น string $opts[CURLOPT_POSTFIELDS] = $params; //ข้อมูลที่จะส่ง โดยใช้โปรโตคอล HTTP ใน POST การดำเนินการในการส่ง } if (strtoupper($mode) != "POST" && strtoupper($mode) != "GET") { $opts[CURLOPT_CUSTOMREQUEST] = strtoupper($mode); } $opts[CURLOPT_URL] = $url; //url ที่ต้องการ $ch = curl_init(); // initialize curl handle curl_setopt_array($ch, $opts); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //ค่าเป็น 1 หมายถึง return ค่ากลับมาในรูป string curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //ตรวจสอบใบรับรองเซิร์ฟเวอร์ของ SSL curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //รอนุญาตให้มีการยืนยันชื่อไฟล์ใบรับรอง $result = curl_exec($ch); // run the whole process curl_close($ch); return $result; } $authen = base64_encode('nathan:bc46'); $url = 'http://localhost/api/firstapi.php'; $opts = array(); $opts[CURLOPT_HTTPHEADER] = array('Authorization: Basic '.$authen); $result = cURL('GET',$url,$params=array(),$opts); $result = json_decode($result,true); print_r($result); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $url = 'http://localhost/api/firstapi.php'; $authen = base64_encode('nathan:bc46'); $params['test'] = 'test'; $params = http_build_query($params); //แปลง array() เป็น string $ch = curl_init($url); // initialize curl handle curl_setopt_array($ch, array( CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array('Authorization: Basic '.$authen), CURLOPT_POSTFIELDS => $params, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 )); $result = curl_exec($ch); $result = json_decode($result,true); curl_close($ch); print_r($result); ?> |
หรือ https://www.gavsblog.com/blog/how-to-use-basic-authentication-with-php-curl 🔥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $url = 'http://localhost/api/firstapi.php'; $username = 'nathan'; $password = 'bc46'; $params['test'] = 'test'; $params = http_build_query($params); //แปลง array() เป็น string $ch = curl_init($url); // initialize curl handle curl_setopt_array($ch, array( CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POSTFIELDS => $params, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 )); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $result = curl_exec($ch); $result = json_decode($result,true); curl_close($ch); print_r($result); ?> |
หรือ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $host = 'Your API root url'; $user_name = 'set_user_name'; $password = 'set_password'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$host); curl_setopt($ch, CURLOPT_POSTFIELDS, ""); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$user_name:$password"); $result = curl_exec($ch); curl_close($ch); $decodedResponse=json_decode($result); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php $url = 'http://localhost/api/firstapi.php'; $params['test'] = 'test'; $params = http_build_query($params); //แปลง array() เป็น string $ch = curl_init($url); // initialize curl handle curl_setopt_array($ch, array( CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array('Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274'), CURLOPT_POSTFIELDS => $params, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0 )); $result = curl_exec($ch); $result = json_decode($result,true); curl_close($ch); print_r($result); ?> |
ดูเพิ่มเติม
https://www.goragod.com/knowledge/การพิสูจน์ตัวตนบน_php_http_authentication_with_php.html 🔥
https://developer.okta.com/blog/2020/01/15/protecting-a-php-api-with-oauth 🔥
https://www.codeofaninja.com/rest-api-authentication-example-php-jwt-tutorial/
https://monkeywebstudio.com/basic-restful-web-api-phpmysql/
https://www.discussdesk.com/how-to-call-api-using-http-basic-authentication-with-php-curl.htm
https://metamug.com/article/api-integration/consuming-rest-api-in-php.html 🔥
https://www.gavsblog.com/blog/how-to-use-basic-authentication-with-php-curl 🔥
ป้ายกำกับ:Call PHP API, Create PHP API, PHP API, เรียกใช้งาน PHP API