防火墙与授权

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.0,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

防火墙与授权

Security组件的核心是授权。的实例处理AuthorizationCheckerInterface.当认证用户的所有步骤都成功完成后,您可以向授权检查人员询问已认证的用户是否具有应用程序的某个操作或资源的访问权限:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
使用ob娱乐下载组件安全核心授权AuthorizationChecker使用ob娱乐下载组件安全核心异常AccessDeniedException// Symfony\Compob娱乐下载onent\Security\Core\Authentication\Token\Storage\TokenStorageInterface实例tokenStorage=……;// Symfony\Compob娱乐下载onent\Security\Core\Authentication\AuthenticationManagerInterface实例authenticationManager=……;// Symfony\Compob娱乐下载onent\Security\Core\Authorization\AccessDecisionManagerInterface实例accessDecisionManager=……;authorizationCheckerAuthorizationChecker (tokenStorageauthenticationManageraccessDecisionManager);/ /……验证用户身份如果(!authorizationChecker->isGranted (“ROLE_ADMIN”)) {AccessDeniedException ();}

请注意

阅读专门的文章来了解更多关于身份验证而且授权

HTTP请求的防火墙

用户认证由防火墙完成。应用程序可能有多个安全区域,因此防火墙使用这些安全区域的映射进行配置。对于这些区域中的每一个,映射都包含一个请求匹配器和一个侦听器集合。请求匹配器使防火墙能够找出当前请求是否指向安全区域。然后监听器会被问到当前请求是否可以用来验证用户:

12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载组件HttpFoundationRequestMatcher使用ob娱乐下载组件安全Http防火墙ExceptionListener使用ob娱乐下载组件安全HttpFirewallMapfirewallMapFirewallMap ();requestMatcherRequestMatcher (“^ /安全区域”);//可调用对象数组听众=[…];exceptionListenerExceptionListener(…);firewallMap->add (requestMatcher听众exceptionListener);

属性所使用的事件分派器以及防火墙映射将作为其第一个参数提供给防火墙HttpKernel

12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载组件HttpKernelKernelEvents使用ob娱乐下载组件安全Http防火墙// HttpKernel使用的EventDispatcher调度程序=……;防火墙防火墙(firewallMap调度程序);调度程序->addListener (KernelEvents::请求,防火墙“onKernelRequest”]);

防火墙注册监听kernel.requestHttpKernel将在它处理的每个请求开始时分派该事件。这样,防火墙可能会阻止用户超出允许的范围。

防火墙配置

的实例提供有关给定防火墙的信息,例如其名称、提供程序、上下文、入口点和拒绝访问的URLFirewallConfig类。

对象可以通过getFirewallConfig(请求$请求)方法FirewallMap类,并通过getConfig ()方法FirewallContext类。

防火墙的听众

当防火墙收到kernel.request事件时,它询问防火墙映射请求是否与安全区域之一匹配。第一个与请求匹配的安全区域将返回一组对应的防火墙侦听器(每个侦听器都是可调用的)。这些侦听器都将被要求处理当前请求。这基本上意味着:找出当前请求是否包含用户可能通过身份验证的任何信息(例如,基本HTTP身份验证侦听器检查请求是否有一个头部被调用PHP_AUTH_USER).

异常监听器

如果有听众抛出AuthenticationException,将安全区域添加到防火墙映射时提供的异常侦听器将跳入。

异常侦听器根据创建时接收到的参数确定接下来会发生什么。它可能启动身份验证过程,可能要求用户再次提供他们的凭据(当他们仅基于“remember-me”cookie进行身份验证时),或者将异常转换为AccessDeniedHttpException,这将最终导致“HTTP/1.1 403: Access Denied”响应。

入口点

当用户根本没有经过身份验证时(即当令牌存储还没有令牌时),防火墙的入口点将被调用以“开始”身份验证过程。应该实现一个入口点AuthenticationEntryPointInterface,它只有一个方法:start ().这个方法接收电流请求对象和触发异常侦听器的异常。该方法应该返回一个响应对象。例如,这可以是包含登录表单的页面,或者在基本HTTP身份验证的情况下,是带有WWW-Authenticate头,这将提示用户提供他们的用户名和密码。

流程:防火墙,认证,授权

希望你现在能稍微了解一下安全上下文的“流”是如何工作的:

  1. 防火墙注册为侦听器kernel.request事件;
  2. 在请求开始时,防火墙检查防火墙映射,看看是否有任何防火墙应该为这个URL激活;
  3. 如果在映射中找到该URL的防火墙,则会通知它的侦听器;
  4. 每个侦听器检查当前请求是否包含任何身份验证信息——侦听器可能(a)验证用户,(b)抛出错误AuthenticationException,或(c)什么都不做(因为请求上没有身份验证信息);
  5. 用户通过身份验证后,您将使用授权拒绝访问某些资源。

阅读下面的文章以了解更多关于身份验证而且授权

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。