超薄框架限制网址

时间:2016-04-18 12:14:23

标签: php slim

我在Slim Framework上有我的REST Base APi。我需要一个帮助来限制一些只能在内部访问而不公开的URL。我怎样才能实现这一点。

/ REST / api / v1 / getusers - 公开发布

/ REST / api / v1 / userinfo - 我只想要本地访问的新api,即网络上的其他系统可以访问但不能公开公开

2 个答案:

答案 0 :(得分:1)

首先添加rka-ip-address-middleware以确定客户端的IP地址。您可以使用composer require akrabat/rka-ip-address-middleware

进行安装
$app->add(new RKA\Middleware\IpAddress());

现在,创建一个组并将所有受限制的路由放入其中。然后,您可以向组中添加中间件,以确保在运行组中的任何路由之前允许客户端IP地址:

$app->group('', function () {
    $app->get('/REST/api/v1/userinfo', UserInfoAction::class);

    // other $app->get(), $app->post(), $app->put() etc actions here

})->add(function ($request, $response, $next) {
    // Only allow internal IP addresses
    $allowed = ['127.0.0.1', '192.168.0.1']; // or whatever
    $clientIp = $request->getAttribute('ip_address');

    // Is the client's IP address in the allowed list?
    if (!in_array($clientIp, $allowed)) {
        // Not allowed: return a 401 error
        return $response->withStatus(401);
    }

    // Allowed: continue to action
    return $next($request, $response);
});

答案 1 :(得分:1)

我为此创建了一个中间件:它的名称是 Slim-Restrict-Route ,你可以找到它here。它使用Respect/Validationrka-ip-address-middlewareIp验证码。

您可以这样注册:

$app->add(new RKA\Middleware\IpAddress());

$options = array(
  'ip' => '192.*.*.*'
);

$app->get('/api/myEndPoint',function ($req, $res, $args) {
  //Your amazing route code
})->add(new \DavidePastore\Slim\RestrictRoute\RestrictRoute($options));