2016-04-24 54 views
0

我很苗条的框架,并试图建立一个基于json的API。所有我想问我怎么能保护我的API,因此只有那些应用程序将调用谁拥有用户名和密码的API函数使用用户名和密码proctect slim rest 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; 
    } 

} 

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

回答

1

我不推荐HTTP基本验证。

为什么?

  1. HTTP基本认证过线你让每个API请求发送客户端凭据,虽然它可以被加密,但是,凭据是在开放。它容易受到中间人攻击。即使在SSL/TLS连接下,它们也很容易受到攻击。
  2. 只需提供用户名和密码,就无法有效限制对安全资源的访问。基本身份验证访问没有到期,因此无限制地访问资源。
  3. 基本认证中没有攻击保护缓解措施。一旦用户凭证遭到破坏,未来可能会实施漏洞利用,因此很难隔离攻击发生的时间和地点。
  4. 用户无法撤销基本身份验证访问权限。 查看更多关于此here

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

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

2

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

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 
+0

请问你举个例子api调用。应用程序如何调用上面列出的任何API函数 –

+0

'curl --user root:t00r http:// localhost/api/something' –