Code-via-Email身份验证
编辑本页Code-via-Email身份验证
一个双因素提供者生成一个随机数字代码,并通过电子邮件发送给用户。
身份验证如何工作
在认证成功时,它生成一个随机数并将其保存在用户实体中。号码通过电子邮件发送给用户。然后用户必须输入该号码才能访问。
位数可配置:
1 2 3 4
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:数字:6
安装
要使用此功能,必须安装scheb / 2 fa-email
.
1
作曲家需要scheb/2fa-email
该包用于发送电子邮件的默认实现假设您正在使用ob娱乐下载symfony /梅勒
.安装软件包:
1
作曲家需要symfony/mailob娱乐下载er
您可以自由地使用您喜欢的任何其他邮件发送库,但是您有实现一个自定义邮件发送器类(说明如下)。
基本配置
要启用此身份验证方法,请将此添加到您的配置中:
1 2 3 4 5 6
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:启用:真正的sender_email:没有-reply@example.comsender_name:约翰美国能源部#可选
您的用户实体必须实现Scheb
.身份验证代码必须持久化,因此请确保它存储在持久化字段中。
12 34 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
<?php名称空间Acme\演示\实体;使用学说\ORM\映射作为ORM;使用Scheb\TwoFactorBundle\模型\电子邮件\TwoFactorInterface;使用ob娱乐下载\组件\安全\核心\用户\用户界面;类用户实现了用户界面,TwoFactorInterface{/ * * *@ORM\列(type = "字符串")* /私人字符串$电子邮件;/ * * *@ORM\Column(type="string", nullable=true) */私人字符串$验证码;/ /[…]公共函数isEmailAuthEnabled():保龄球{返回真正的;//这可以是一个持久化字段,用于打开/关闭电子邮件代码验证}公共函数getEmailAuthRecipient():字符串{返回$这->电子邮件;}公共函数getEmailAuthCode():字符串{如果(零= = =$这->验证码){扔新\ LogicException (“邮件验证码未设置”);}返回$这->验证码;}公共函数setEmailAuthCode(字符串$验证码):无效{$这->验证码=$验证码;}}
配置引用
1 2 3 4 5 6 7 8 9 10
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:启用:真正的#如果需要启用邮件认证,默认为false梅勒:acme.custom_mailer_service#使用替代服务发送认证码code_generator:acme.custom_code_generator_service#使用替代服务生成认证码sender_email:me@example.com#发件人邮箱地址sender_name:约翰美国能源部#发件人名称数字:4#认证码的位数模板:安全/ 2 fa_form.html.twig用于呈现身份验证表单的模板
自定义邮件
默认情况下,电子邮件是纯文本,非常简单。如果你想要一个不同的风格(例如HTML),你必须创建你自己的邮件服务。它必须实现Scheb \ TwoFactorBundle \ \ AuthCodeMailerInterface梅勒
.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<?php名称空间Acme\演示\梅勒;使用Scheb\TwoFactorBundle\模型\电子邮件\TwoFactorInterface;使用Scheb\TwoFactorBundle\梅勒\AuthCodeMailerInterface;类MyAuthCodeMailer实现了AuthCodeMailerInterface{/ /[…]公共函数sendAuthCode(TwoFactorInterface$用户):无效{$验证码=$用户->getEmailAuthCode ();//发送邮件}}
然后将其注册为服务并更新配置:
1 2 3 4
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:梅勒:acme.custom_mailer_service
重新发送认证码
当您使用默认的身份验证代码生成器附带的捆绑,有一个简单的方法来重新发送电子邮件与身份验证代码。Get /注入服务scheb_two_factor.security.email.code_generator
和调用方法重发(
.
自定义代码生成器
如果您希望以不同的方式生成代码,您可以使用自己的代码生成器。创建服务实现Scheb
并在配置中注册它:
1 2 3 4
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:code_generator:acme.custom_code_generator_service
自定义认证表单模板
bundle使用资源/视图/认证/ form.html.twig
以呈现身份验证表单。如果你想使用不同的模板,你可以简单地在配置中注册它:
1 2 3 4
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:模板:安全/ 2 fa_form.html.twig
自定义表单呈现
在某些情况下,仅仅更改模板是不够的。例如,您正在多个防火墙上使用双因素身份验证,您需要为每个防火墙呈现不同的表单.在这种情况下,您可以实现一个表单呈现器来完全自定义呈现逻辑。
创建一个实现类Scheb
:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php名称空间Acme\演示\FormRenderer;使用Scheb\TwoFactorBundle\安全\TwoFactor\提供者\TwoFactorFormRendererInterface;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;类MyFormRenderer实现了TwoFactorFormRendererInterface{/ /[…]公共函数renderForm(请求$请求数组,$templateVars):响应{//自定义表单呈现}}
然后将其注册为服务并更新配置:
1 2 3 4
#配置/包/ scheb_2fa.yamlscheb_two_factor:电子邮件:form_renderer:acme.custom_form_renderer_service