隐藏用户名和密码时如何发送API调用

时间:2015-02-07 17:42:59

标签: php jquery ajax api rest

我正在尝试编写一些简单的代码来帮助我了解如何构建一个API,其他开发人员可以连接到我的应用程序。

开发人员需要通过HTTP标头传递用户名/密码,并通过GET将方法传递给API。

PHP API将检查用户名和密码的标头值。如果两个值都匹配,则允许在服务器上执行该功能。

但我不确定如何处理以下两件事并寻求帮助

  1. 如果用户在jQuery代码中写下他们的用户名和密码,那么任何人都可以在源代码中看到用户/密码。我如何保护这些敏感信息?
  2. 如何通过标题正确传递用户名和密码。由于某种原因,我的代码没有捕获自定义标头(即API-USER,API-PASS)
  3. 这是我的客户端代码

    <!DOCTYPE html>
        <head>
            <meta http-equiv="content-type" content="text/html; charset=utf-8">
            <meta http-equiv="encoding" content="utf-8">
            <meta charset="utf-8">
            <title></title>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    
            <script>
                $(function(){
                    $.ajaxSetup({
                      headers: {
                        'API-USER' : 'admin',
                        'API-PASS' : 'admin'
                      }
                    });
    
                    $.getJSON("http://localhost/api.php?method=sayHello&callback=?", function(data){
                        console.log(data);
                        console.log("HI");
                    });
                });
            </script>
        </head>
        <body>
            <h1>It works!</h1>
        </body>
    </html>
    

    这是我的服务器端代码“我的API”

    <?php
    
    $_GET["callback"] = "";
    if(isset($_GET['method']) && authenticate() ){
        $fun = trim($_GET['method']);
        if( $fun != "authenticate" && function_exists($fun) ){
    
            $fun();
        }
    }
    
    function sayHello(){
    
        $a = json_encode(array("Hello World, Welcome to this new API!!!"));
    
        echo $_GET["callback"] . sendCallBack($a);
    }
    
    
    function authenticate(){
    
        if(isset($_SERVER['API-USER'])){
            $user = $_SERVER['API-USER'];
        }
    
        if(isset($_SERVER['API-PASS'])){
            $pass = $_SERVER['API-PASS'];
        }
        //this will be replaced with a database lookup to authenticate the user
        if($user == "admin" &&  $pass == "admin"){
            return true;
        } 
    
        return false
    }
    
    
    function sendCallBack($arr){
        return '(' . json_encode($arr). ')';
    }
    ?>
    

0 个答案:

没有答案