我在Slim Framework上有我的REST Base APi。我需要一个帮助来限制一些只能在内部访问而不公开的URL。我怎样才能实现这一点。
/ REST / api / v1 / getusers - 公开发布
/ REST / api / v1 / userinfo - 我只想要本地访问的新api,即网络上的其他系统可以访问但不能公开公开
答案 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/Validation和rka-ip-address-middleware的Ip
验证码。
您可以这样注册:
$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));