使用用户名和密码来保护苗条休息api

时间:2016-04-24 16:29:10

标签: php android api rest slim

我在苗条的框架中相当新,并试图构建一个基于json的api。所有我想问我如何保护我的api所以只有那些应用程序会调用具有用户名和密码的api函数

这是我的休息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;
   }

}

我只是构建一个简单的获取路由,它可以工作,但我如何保证这一点,以便如果应用程序有一个有效的用户名和密码,那么只有它返回结果。

2 个答案:

答案 0 :(得分:2)

一种方法是使用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

答案 1 :(得分:1)

我不建议使用HTTP基本身份验证。

<强>为什么吗

  1. HTTP Basic Auth通过您发出的每个API请求在线路上发送客户端凭据,虽然可以对其进行加密,但凭据仍处于打开状态。它容易受到中间人攻击。即使在SSL / TLS连接下,它们也可能容易受到攻击。
  2. 只需提供用户名和密码,就无法有效限制对安全资源的访问。基本身份验证访问没有到期,因此可以无限制地访问资源。
  3. Basic Auth中没有减轻攻击保护。一旦用户凭证遭到破坏,将来可以进行利用,因此很难确定攻击何时何地开始。
  4. 用户无法撤消基本身份验证访问权限。 有关此here的更多信息,请参阅。
  5. 相反。使用基于令牌的身份验证策略,例如 OAuth 2.0 。它更健壮,更安全。它在每个请求上使用令牌而不是用户凭据。令牌受时间限制,可抵抗中间人和CSRF攻击。

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