使用静态密钥的简单 api 身份验证
Simple api auth with static key
我的项目 API 受到 symfony 安全防火墙的保护,有用户提供商等等。现在我只需要几个 public 仅使用单个令牌保护的路由,我的意思是单个随机 32 字符字符串,不需要用户提供程序、jwt 令牌等,只需检查此静态字符串是否匹配我的并响应。在 symfony(4) 中有没有比在每个请求事件上使用内核事件更好的方法?
这是我用于另一个项目的 class,其中 所有 路由应由 URL 令牌保护:
<?php
namespace App\AccessControl;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
class AccessControlSubscriber implements EventSubscriberInterface
{
private string $token;
public function __construct(string $token)
{
$this->token = $token;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
public function onKernelController(ControllerEvent $event): void
{
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
$request = $event->getRequest();
if (0 === strpos($request->getPathInfo(), '/_profiler') || 0 === strpos($request->getPathInfo(), '/_fragment')) {
return;
}
$token = $request->query->get('token');
if ($this->token !== $token || $this->token === '') {
throw new AccessDeniedHttpException('This action needs a valid token!');
}
}
}
它挂钩到所有使用控制器的内核事件,就在解析控制器的参数和调用控制器操作本身之前。分析器路由被排除在外,这样你仍然可以使用它。
如果你只想将它用于 某些 控制器,你可以检查 $controller
数组中特定的 classes 设置,就像我一样为探查器工具栏的路线做了它
我的项目 API 受到 symfony 安全防火墙的保护,有用户提供商等等。现在我只需要几个 public 仅使用单个令牌保护的路由,我的意思是单个随机 32 字符字符串,不需要用户提供程序、jwt 令牌等,只需检查此静态字符串是否匹配我的并响应。在 symfony(4) 中有没有比在每个请求事件上使用内核事件更好的方法?
这是我用于另一个项目的 class,其中 所有 路由应由 URL 令牌保护:
<?php
namespace App\AccessControl;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\KernelEvents;
class AccessControlSubscriber implements EventSubscriberInterface
{
private string $token;
public function __construct(string $token)
{
$this->token = $token;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
public function onKernelController(ControllerEvent $event): void
{
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
$request = $event->getRequest();
if (0 === strpos($request->getPathInfo(), '/_profiler') || 0 === strpos($request->getPathInfo(), '/_fragment')) {
return;
}
$token = $request->query->get('token');
if ($this->token !== $token || $this->token === '') {
throw new AccessDeniedHttpException('This action needs a valid token!');
}
}
}
它挂钩到所有使用控制器的内核事件,就在解析控制器的参数和调用控制器操作本身之前。分析器路由被排除在外,这样你仍然可以使用它。
如果你只想将它用于 某些 控制器,你可以检查 $controller
数组中特定的 classes 设置,就像我一样为探查器工具栏的路线做了它