Symfonyob娱乐下载 5.1新增功能:更新的安全系统
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
ob娱乐下载Symfony 5.1将包含一个新的安全系统作为它最大的新功能之一。经过几个月的计划、讨论和努力工作,我们可以按时完成Symfony 5.1的实验特性。ob娱乐下载
与以前的制度相比,主要的区别是:
1)除去警卫以外的一切
在新的Security系统中,只有一个侦听器将请求传递给Symfony提供的验证器管理器。ob娱乐下载该管理器负责会话管理、存储令牌、“记住我”功能等。
一切都与一个概念和界面相关:身份验证器.这简化了Security组件的内部结构,使开发人员更容易理解所有内容。
2)转向基于事件的系统
Security组件没有使用Symfony事件来扩展其所有特性。ob娱乐下载新系统改变了这一点,它基于三个事件:
CheckPassportEvent
,这是主要事件,检查给定凭证(密码、证书、CSRF令牌等)的有效性。LoginSuccessEvent
,在凭证有效时分派。LoginFailureEvent
,在凭证错误时被发送。
这是所有!三个简单的事件为您的应用程序提供了所需的所有灵活性。
3)下一代警卫
保安人员在Symfony 2.8中引ob娱乐下载入通过GuardAuthenticatorInterface
.新的安全系统允许简化一些Guard功能,并改进其他功能。首先,checkCredentials ()
方法删除getCredentials ()
而且getUser ()
方法合并为一个名为authenticate ()
.
这引入了几个新概念:
护照
,authenticate ()
方法返回一个“安全护照”,其中包含用户对象和身份验证所需的任何凭据;徽章
,护照所需的额外资料。
的听众使用护照和徽章CheckPassportEvent
,它将验证和检查护照和所有的徽章。如果所有标识都被解析,则用户身份验证成功。
下面是在登录表单中使用新系统时的一个简化示例:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\安全\核心\异常\UsernameNotFoundException;使用ob娱乐下载\组件\安全\Http\身份验证\AuthenticatorInterface;使用ob娱乐下载\组件\安全\Http\身份验证\护照\徽章\CsrfTokenBadge;使用ob娱乐下载\组件\安全\Http\身份验证\护照\凭证\PasswordCredentials;使用ob娱乐下载\组件\安全\Http\身份验证\护照\护照;使用ob娱乐下载\组件\安全\Http\身份验证\护照\PassportInterface;类FormAuthenticator实现了AuthenticatorInterface{/ /……公共函数进行身份验证(请求$请求):PassportInterface{//根据“email”表单字段查找用户$用户=$这->userRepository->findOneByEmail ($请求->get (“电子邮件”));如果(!$用户) {扔新UsernameNotFoundException ();}返回新护照($用户,新PasswordCredentials ($请求->get (“密码”), (//和使用“csrf_token”字段的CSRF保护新CsrfTokenBadge (“loginform”,$请求->get (“csrf_token”)),//和添加升级密码哈希的支持新PasswordUpgradeBadge ($请求->get (“密码”),$这->userRepository)]);}}
新的安全系统默认是禁用的,但您可以通过以下方式启用它:
1 2 3 4
#配置/包/ security.yaml安全:#……enable_authenticator_manager:真正的
我们将很快修改所有关于安全性的Syob娱乐下载mfony Doc文章,开始使用这个新的安全系统。同时,你可以阅读以下博文:认识一下新的Symfonyob娱乐下载 Security: Authenticators由Wouter De Jong发布,他是这个新安全系统的主要开发者。这篇文章完全基于Wouter的博客文章。
评论
如果不经过身份验证就不能读取用户数据怎么办?
例如,userRepository可能有一个方法来验证所提供的凭据([email, password]→user或null),但它可能不允许未经身份验证的读取——存储库在安全性和工作流方面都有额外的保护层。
类似地,在对LDAP进行身份验证时,我们必须在从LDAP服务器读取任何内容之前调用' bind(userDN, password) ',因为LDAP服务器有自己的一组访问规则。
https://github.com/ob娱乐下载symfony/symfony/pull/36600
我刚刚在ecphp/cas-bundle中添加了对新的身份验证系统的支持!
参见:https://github.com/ecphp/cas-bundle/pull/8
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
Romaric Drigon is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now