PHP Basic Rest API with Custom Header


PHP Basic Rest API with Custom Header

我对PHP Rest API相当陌生。我想升级我的知识,所以我需要为我的 Web 服务创建授权。我想先问他们是否有权查看我的网络服务,如果没有,那么他们就不会看到它。

这是我到目前为止所做的:

  <?php 
  include('db.php');
  $sql = "SELECT * FROM bb_users";
  $stmt = $conn->prepare($sql);
  $stmt->execute();
  $set = array();
  while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
      $set = $r;
  }
  // $username='ABC';
  // $password='XYZ';
  //header("Authorization: Basic " . base64_encode($username . ":" . $password));
  header('Content-type: application/json');
  header('Access-Control-Allow-Origin: *');
  echo json_encode($set);
  ?>

有什么想法吗?我很乐意感谢您的帮助。如果您可以提供一些提示或链接来开始使用。

这是您尝试执行的操作的基本实现。 请记住,这使用基本访问身份验证,它不提供任何针对用户名和密码的保护,因为这些几乎是通过网络传输的。

为了构建一个更好更健壮的 API,我建议 https://www.apigility.org/在我看来它是最好的之一,如果不是最好的的话,

就身份验证而言,我推荐OAuth。

仅供参考:我假设您的代码是正确的并且没有任何错误,所以我只是将其移动到 if 块内。有一个调用 check_if_credentials_are_valid_function 这是您将定义和调用的函数,以确保用户名和密码有效。如果凭据有效,它将返回 json 编码的数据并退出,否则它将继续到脚本末尾并返回 401 状态代码。

<?php
$headers = apache_request_headers();
if(isset($headers['Authorization'])) {
  $authorization = $headers['Authorization'];
  if (preg_match('/Basic's+(.*)$/i', $authorization, $auth)) {
      // Split the string, base64 decode it
      list($user, $pass) = explode(':', base64_decode($auth[1]));
      if (check_if_credentials_are_valid_function($user, $pass)) {
        include('db.php');
        $sql = "SELECT * FROM bb_users";
        $stmt = $conn->prepare($sql);
        $stmt->execute();
        $set = array();
        while($r = $stmt->fetchAll(PDO::FETCH_ASSOC)){
          $set = $r;
        }
        // $username='ABC';
        // $password='XYZ';
        //header("Authorization: Basic " . base64_encode($username . ":" . $password));
        header('Content-type: application/json');
        header('Access-Control-Allow-Origin: *');
        echo json_encode($set);
        exit();
      }
  }
}
header('HTTP/1.0 401 Unauthorized');
exit();
?>