带有自定义标题的PHP Basic Rest API

时间:2015-01-17 05:52:34

标签: php rest

我是PHP Rest API的新手。我想升级我的知识,所以我需要为我的网络服务创建一个授权。我想首先询问他们是否有权查看我的网络服务,如果没有,那么他们就不会看到它。

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

  <?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);

  ?>

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

1 个答案:

答案 0 :(得分:0)

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

为了构建更强大的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();

?>