防火墙和安全上下文

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.0,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

防火墙和安全上下文

安全组件的核心是安全上下文,的一个实例SecurityContextInterface。当所有步骤的过程中验证用户已成功,您可以问问安全上下文通过身份验证的用户访问某一行动或资源的应用程序:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址\组件\安全\SecurityContext;使用欧宝娱乐app下载地址\组件\安全\核心\异常\AccessDeniedException;美元securityContext=SecurityContext ();/ /……认证用户如果(!美元securityContext- >isGranted (“ROLE_ADMIN”)){AccessDeniedException ();}

防火墙的HTTP请求

一个用户进行身份验证是通过防火墙。一个应用程序可能有多个安全领域,所以防火墙配置使用这些安全区域的地图。为每个这些领域,地图包含请求匹配器和听众的集合。请求匹配器使防火墙能够找出当前请求是否指向一个安全区域。听众然后问当前请求是否可以用于验证用户:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用欧宝娱乐app下载地址\组件\安全\Http\FirewallMap;使用欧宝娱乐app下载地址\组件\HttpFoundation\RequestMatcher;使用欧宝娱乐app下载地址\组件\安全\Http\防火墙\ExceptionListener;美元地图=FirewallMap ();美元requestMatcher=RequestMatcher (“^ /安全区域”);组件/ / Symfony的实例欧宝娱乐app下载地址\ \安全\ Http \ \ ListenerInterface防火墙美元听众=数组(…);美元exceptionListener=ExceptionListener (…);美元地图- >add (美元requestMatcher,美元听众,美元exceptionListener);

防火墙将映射到防火墙作为它的第一个参数,结合使用的事件调度器HttpKernel:

1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址\组件\安全\Http\防火墙;使用欧宝娱乐app下载地址\组件\HttpKernel\KernelEvents;/ /使用的EventDispatcher HttpKernel美元调度程序=……;美元防火墙=防火墙(美元地图,美元调度程序);美元调度程序- >addListener (KernelEvents::请求,数组(美元防火墙,“onKernelRequest”);

防火墙是注册听kernel.request事件将会派出的HttpKernel在每个请求it过程的开始。这样,防火墙可以防止用户任何超过允许的。

防火墙的听众

当防火墙被通知的kernel.request事件,它要求防火墙地图如果请求匹配的一个安全区域。第一个安全区域相匹配的请求将返回一组相应的防火墙的听众(每个实现ListenerInterface)。这些侦听器都将被要求处理当前请求。这基本上意味着:找出当前请求是否包含任何信息的用户可能进行身份验证(例如基本HTTP身份验证侦听器检查请求头PHP_AUTH_USER)。

异常监听器

如果任何听众抛出AuthenticationException异常监听器,当添加安全领域提供了防火墙映射将激增。

异常监听器决定了接下来会发生什么,基于参数收到时创建的。也许可能启动认证程序,要求用户再次提供证书(当他只有验证基于“记住我”饼干),或转换成一个例外AccessDeniedHttpException,这将最终导致“HTTP / 1.1 403:拒绝访问”的回应。

入口点

当用户没有被验证(即当安全上下文没有令牌),防火墙的入口将被称为“开始”身份验证过程。一个入口点应该实现AuthenticationEntryPointInterface只有一个方法:start ()。这个方法接收电流请求对象,并引发异常的异常监听器。方法应该返回一个响应对象。例如,这可能包含登录表单的页面,或者在基本HTTP身份验证的情况下,响应的WWW-Authenticate头,这将提示用户提供用户名和密码。

流:防火墙、身份验证、授权

希望你现在可以看一下安全上下文的“流”是如何工作的:

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

接下来的部分找到更多关于阅读身份验证授权

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。