防火墙和授权
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.3(当前的稳定版本)。
防火墙和授权
安全组件的核心是授权。这是由的一个实例AuthorizationCheckerInterface。当所有步骤的过程中验证用户成功了,你可以问授权检验员如果经过身份验证的用户访问某一行动或资源的应用程序:
1 2 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核心\ ob娱乐下载\安全\ \组件的实例验证\ \存储\ TokenStorageInterface象征美元tokenStorage=……;/ / Symfony的实例\ob娱乐下载 \安全\ \认证\ AuthenticationManagerInterface核心组件美元authenticationManager=……;/ / Symfony的实例\ob娱乐下载 \安全\ \授权\ AccessDecisionManagerInterface核心组件美元accessDecisionManager=……;美元authorizationChecker=新AuthorizationChecker (美元tokenStorage,美元authenticationManager,美元accessDecisionManager);/ /……认证用户如果(!美元authorizationChecker- >isGranted (“ROLE_ADMIN”)){扔新AccessDeniedException ();}
防火墙的HTTP请求
一个用户进行身份验证是通过防火墙。一个应用程序可能有多个安全领域,所以防火墙配置使用这些安全区域的地图。为每个这些领域,地图包含请求匹配器和听众的集合。请求匹配器使防火墙能够找出当前请求是否指向一个安全区域。听众然后问当前请求是否可以用于验证用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\HttpFoundation\RequestMatcher;使用ob娱乐下载\组件\安全\Http\防火墙\ExceptionListener;使用ob娱乐下载\组件\安全\Http\FirewallMap;美元firewallMap=新FirewallMap ();美元requestMatcher=新RequestMatcher (“^ /安全区域”);/ /数组可调用的美元听众= […];美元exceptionListener=新ExceptionListener (…);美元firewallMap- >add (美元requestMatcher,美元听众,美元exceptionListener);
防火墙将映射到防火墙作为它的第一个参数,结合使用的事件调度器HttpKernel:
1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpKernel\KernelEvents;使用ob娱乐下载\组件\安全\Http\防火墙;/ /使用的EventDispatcher HttpKernel美元调度程序=……;美元防火墙=新防火墙(美元firewallMap,美元调度程序);美元调度程序- >addListener (KernelEvents::请求,美元防火墙,“onKernelRequest”]);
防火墙是注册听kernel.request
事件将派出HttpKernel在每个请求it过程的开始。这样,防火墙可以防止用户任何超过允许的。
防火墙配置
防火墙给出的信息,如它的名字,提供者,上下文,提供的入口点和拒绝访问URL的实例FirewallConfig类。
可以通过访问这个对象getFirewallConfig(请求$请求)
的方法FirewallMap类和通过getConfig ()
的方法FirewallContext类。
防火墙的听众
当防火墙被通知的kernel.request
事件,它要求防火墙地图如果请求匹配的一个安全区域。第一个安全区域相匹配的请求将返回一组相应的防火墙听众(每一个可调用)。这些侦听器都将被要求处理当前请求。这基本上意味着:找出当前请求是否包含任何信息的用户可能进行身份验证(例如基本HTTP身份验证侦听器检查请求头PHP_AUTH_USER
)。
异常监听器
如果任何听众抛出AuthenticationException异常监听器,当添加安全领域提供了防火墙映射将激增。
异常监听器决定了接下来会发生什么,基于参数收到时创建的。也许可能启动认证程序,要求用户提供他们的凭证(当他们只有验证基于“记住我”饼干),或转换成一个例外AccessDeniedHttpException,这将最终导致“HTTP / 1.1 403:拒绝访问”的回应。
入口点
当用户没有被验证(即当令牌存储没有令牌),防火墙的入口将被称为“开始”身份验证过程。一个入口点应该实现AuthenticationEntryPointInterface只有一个方法:start ()。这个方法接收电流请求对象,并引发异常的异常监听器。方法应该返回一个响应对象。例如,这可能包含登录表单的页面,或者在基本HTTP身份验证的情况下,响应的WWW-Authenticate
头,这将提示用户提供他们的用户名和密码。
流:防火墙、身份验证、授权
希望你现在可以看一下安全上下文的“流”是如何工作的:
- 防火墙是注册的侦听器
kernel.request
事件; - 初的请求,防火墙检查防火墙映射是否任何防火墙应该为这个URL活跃;
- 如果防火墙在地图中找到这个URL,其听众通知;
- 每个侦听器检查当前请求是否包含任何身份验证信息——一个侦听器可能(a)一个用户进行身份验证,(b)抛出
AuthenticationException
或(c)什么都不做(因为没有请求的身份验证信息); - 一旦用户通过身份验证,您将使用授权拒绝访问某些资源。