2015-01-17 61 views
0

我對PHP Rest API相當陌生。我想升級我的知識,所以我需要爲我的Web服務創建一個授權。我想先問問他們是否有權查看我的網絡服務,如果不是,那麼他們不會看到它。帶自定義頭的PHP Basic 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); 

    ?> 

任何想法?我很樂意感謝你的幫助。如果你可以提供一些提示或鏈接開始。

回答

0

這是你正在嘗試做的基本實現。請記住,這使用基本訪問身份驗證,它不提供任何防止用戶名和密碼的保護,因爲這些都是通過網絡傳輸的。

要建立一個更好更強大的API,我建議https://www.apigility.org/在我看來,這是最好的之一,如果不是最好的了,

至於認證推移,我推薦的OAuth。

FYI:我假設你的代碼是正確的,沒有任何錯誤,所以我只是將它移動到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(); 

?>