繁体   English   中英

使用用户名和密码保护苗条的REST API

[英]proctect slim rest api using username and password

我在苗条的框架中是相当新的,并试图构建基于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;
   }

}

我只是建立一个简单的获取路线,它可以工作,但是我如何确保它的安全,以便如果应用程序具有有效的用户名和密码,那么它只会返回结果。

一种方法是使用HTTP基本身份验证 为此,您可以使用基本身份验证中间件 首先使用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

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

为什么?

  1. HTTP Basic Auth通过您发出的每个API请求通过线路发送客户端凭据,尽管可以对其进行加密,但是凭据仍然是公开的。 它容易受到中间人攻击。 即使在SSL / TLS连接下,它们也容易受到攻击。
  2. 仅提供用户名和密码不能有效地限制对安全资源的访问。 基本身份验证访问没有到期,因此可以无限制地访问资源。
  3. 基本身份验证中没有缓解攻击的措施。 一旦用户凭证遭到破坏,将来就可以进行利用,因此很难隔离攻击的时间和地点。
  4. 用户无法撤消基本身份验证访问权限。 这里查看更多。

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

尝试进一步研究OAuth 2.0; 有很多文档。 您可以将现有的OAuth库用于PHP JSON API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM