proctect slim rest api 使用用户名和密码
proctect slim rest api using username and password
我是 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;
}
}
我只是构建了一个简单的获取路由并且它可以工作,但我如何才能确保它的安全,以便如果应用程序具有有效的用户名和密码,那么只有它 return 结果。
一种方法是使用 HTTP Basic Authentication. For that you can use 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
我不推荐 HTTP 基本身份验证。
为什么?
- HTTP Basic Auth 在您发出的每个 API 请求中通过线路发送客户端凭据,虽然它可以被加密,但凭据仍然是公开的。它容易受到中间人攻击。即使在 SSL/TLS 连接下,它们也可能容易受到攻击。
- 您不能仅通过提供用户名和密码来有效地限制对安全资源的访问。基本身份验证访问没有过期,因此可以无限制地访问资源。
- 基本身份验证中没有攻击保护缓解措施。一旦用户凭据被泄露,在未来很长一段时间内都可以进行利用,因此很难确定攻击何时何地开始。
- 用户无法撤销基本身份验证访问权限。
查看更多关于这个 here.
相反。使用基于令牌的身份验证策略,例如 OAuth 2.0。它更健壮和安全。它在每个请求上使用令牌而不是用户凭据。令牌是有时间限制的,并且可以抵抗中间人和 CSRF 攻击。
尝试更多地了解 OAuth 2.0;那里有很多文档。您可以为您的 PHP JSON API.
使用现有的 OAuth library
我是 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;
}
}
我只是构建了一个简单的获取路由并且它可以工作,但我如何才能确保它的安全,以便如果应用程序具有有效的用户名和密码,那么只有它 return 结果。
一种方法是使用 HTTP Basic Authentication. For that you can use 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
我不推荐 HTTP 基本身份验证。
为什么?
- HTTP Basic Auth 在您发出的每个 API 请求中通过线路发送客户端凭据,虽然它可以被加密,但凭据仍然是公开的。它容易受到中间人攻击。即使在 SSL/TLS 连接下,它们也可能容易受到攻击。
- 您不能仅通过提供用户名和密码来有效地限制对安全资源的访问。基本身份验证访问没有过期,因此可以无限制地访问资源。
- 基本身份验证中没有攻击保护缓解措施。一旦用户凭据被泄露,在未来很长一段时间内都可以进行利用,因此很难确定攻击何时何地开始。
- 用户无法撤销基本身份验证访问权限。 查看更多关于这个 here.
相反。使用基于令牌的身份验证策略,例如 OAuth 2.0。它更健壮和安全。它在每个请求上使用令牌而不是用户凭据。令牌是有时间限制的,并且可以抵抗中间人和 CSRF 攻击。
尝试更多地了解 OAuth 2.0;那里有很多文档。您可以为您的 PHP JSON API.
使用现有的 OAuth library