【问题标题】:proctect slim rest api using username and password使用用户名和密码保护 slim rest api
【发布时间】:2016-08-17 23:24:59
【问题描述】:

我是苗条框架的新手,正在尝试构建基于 json 的 api。我只想问如何保护我的 api,所以只有那些应用程序会调用具有用户名和密码的 api 函数

这是我的rest api的代码

require __DIR__ . '/vendor/autoload.php';


$app = new Slim\App();
//slim application routes
$app->get('/', function ($request, $response, $args) { 
 $response->withJson("Welcome Message", 201);
 return $response;
});

$app->get('/orders/status/{status}', function ($request, $response, $args) { 

   return get_Orders($request, $response, $args);

});



$app->run();


function get_Orders($request, $response, $args){

    if($args['status'] == "processing"){
        $response->withJson("list of processing orders}", 200);
        return $response;
   }
   else{
        $response->withJson("Premission not guranted", 200);
        return $response;
   }

}

我只是构建了一个简单的 get 路由并且它可以工作,但是我如何保护它,以便如果应用程序具有有效的用户名和密码,那么只有它返回结果。

【问题讨论】:

    标签: php android api rest slim


    【解决方案1】:

    一种方法是使用HTTP Basic Authentication。为此,您可以使用Basic Authentication middleware。首先使用composer安装中间件。

    composer require tuupola/slim-basic-auth
    

    安装中间件后,将其添加到 Slim 应用中。

    $app = new \Slim\App;
    
    $app->add(new \Slim\Middleware\HttpBasicAuthentication([
        "users" => [
            "root" => "t00r",
            "user" => "passw0rd"
        ]
    ]));
    

    现在所有路线都受密码保护,您必须在请求中包含用户名和密码。

     $ curl --user root:t00r https://localhost/api/something
    

    【讨论】:

    • 请您引用一个示例 api 调用。应用如何调用上面列出的任何 api 函数
    【解决方案2】:

    我不推荐 HTTP 基本身份验证。

    为什么?

    1. HTTP Basic Auth 通过您发出的每个 API 请求的线路发送客户端凭据,虽然它可以被加密,但凭据仍然是公开的。它容易受到中间人攻击。即使在 SSL/TLS 连接下,它们也可能容易受到攻击。
    2. 您不能仅通过提供用户名和密码来有效地限制对安全资源的访问。基本身份验证访问没有过期,因此可以无限制地访问资源。
    3. 基本身份验证中没有攻击保护缓解措施。一旦用户凭据被泄露,可以在未来到目前为止进行攻击,因此很难隔离攻击何时何地开始。
    4. 用户无法撤销基本身份验证访问。 在此here 上查看更多信息。

    相反。使用基于令牌的身份验证策略,例如 OAuth 2.0。它更加健壮和安全。它在每个请求上使用令牌而不是用户凭据。令牌是有时间限制的,并且可以抵抗中间人攻击和 CSRF 攻击。

    尝试更多地学习 OAuth 2.0;那里有很多文档。您可以将现有的OAuth library 用于您的 PHP JSON API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2011-06-20
      • 2016-10-03
      • 2017-12-02
      • 2011-08-21
      相关资源
      最近更新 更多