防火墙和安全背景信息
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.0,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
防火墙和安全背景信息
安全组件的核心是安全上下文,它是的实例SecurityContextInterface.当用户身份验证过程中的所有步骤都已成功执行时,您可以询问安全上下文,通过身份验证的用户是否访问应用程序的某个操作或资源:
1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\安全\SecurityContext;使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;$securityContext=新SecurityContext ();/ /……验证用户身份如果(!$securityContext->isGranted (“ROLE_ADMIN”)) {扔新AccessDeniedException ();}
HTTP请求的防火墙
用户认证由防火墙完成。应用程序可能有多个安全区域,因此防火墙使用这些安全区域的映射进行配置。对于这些区域中的每一个,映射都包含一个请求匹配器和一个侦听器集合。请求匹配器使防火墙能够找出当前请求是否指向安全区域。然后监听器会被问到当前请求是否可以用来验证用户:
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\安全\Http\FirewallMap;使用ob娱乐下载\组件\HttpFoundation\RequestMatcher;使用ob娱乐下载\组件\安全\Http\防火墙\ExceptionListener;$地图=新FirewallMap ();$requestMatcher=新RequestMatcher (“^ /安全区域”);// Symfony\Compoob娱乐下载nent\Security\Http\Firewall\ListenerInterface的实例$听众=数组(…);$exceptionListener=新ExceptionListener(…);$地图->add ($requestMatcher,$听众,$exceptionListener);
属性所使用的事件分派器以及防火墙映射将作为其第一个参数提供给防火墙HttpKernel:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\安全\Http\防火墙;使用ob娱乐下载\组件\HttpKernel\KernelEvents;// HttpKernel使用的EventDispatcher$调度程序=……;$防火墙=新防火墙($地图,$调度程序);$调度程序->addListener (KernelEvents::请求,数组($防火墙,“onKernelRequest”);
防火墙注册监听kernel.request
事件,将由HttpKernel
在它处理的每个请求的开始。这样,防火墙可能会阻止用户超出允许的范围。
防火墙的听众
当防火墙收到kernel.request
事件时,它询问防火墙映射请求是否与安全区域之一匹配。第一个与请求匹配的安全区域将返回一组对应的防火墙侦听器(每个侦听器都实现ListenerInterface).这些侦听器都将被要求处理当前请求。这基本上意味着:找出当前请求是否包含用户可能通过身份验证的任何信息(例如,基本HTTP身份验证侦听器检查请求是否有一个头部被调用PHP_AUTH_USER
).
异常监听器
如果有听众抛出AuthenticationException,将安全区域添加到防火墙映射时提供的异常侦听器将跳入。
异常侦听器根据创建时接收到的参数确定接下来会发生什么。它可能会启动身份验证过程,可能会要求用户再次提供他的凭据(当他只基于“remember-me”cookie进行了身份验证时),或者将异常转换为AccessDeniedHttpException,这将最终导致“HTTP/1.1 403: Access Denied”响应。
入口点
当用户根本没有经过身份验证时(即当安全上下文还没有令牌时),防火墙的入口点将被调用以“开始”身份验证过程。应该实现一个入口点AuthenticationEntryPointInterface,它只有一个方法:start ().这个方法接收电流请求对象和触发异常侦听器的异常。该方法应该返回一个响应对象。例如,这可以是包含登录表单的页面,或者在基本HTTP身份验证的情况下,是带有WWW-Authenticate
头,这将提示用户提供其用户名和密码。
流程:防火墙,认证,授权
希望你现在能稍微了解一下安全上下文的“流”是如何工作的:
- 防火墙注册为侦听器
kernel.request
事件; - 在请求开始时,防火墙检查防火墙映射,看看是否有任何防火墙应该为这个URL激活;
- 如果在此URL的映射中发现防火墙,则会通知其侦听器
- 每个侦听器检查当前请求是否包含任何身份验证信息——侦听器可能(a)验证用户,(b)抛出错误
AuthenticationException
,或(c)什么都不做(因为请求上没有身份验证信息); - 用户通过身份验证后,您将使用授权拒绝访问某些资源。