你觉得身份验证
编辑本页你觉得身份验证
TOTP认证使用你觉得算法生成认证码。相比谷歌验证器双因素提供程序, TOTP双因素提供程序提供了更多配置选项,但这意味着您的配置不一定与谷歌验证程序.
可自定义多个参数:
- 位数(default =
6
) - 摘要(default =
sha1
) - 周期(default =
30.
秒) - 可添加自定义参数
提示
使用默认值配置TOTP兼容谷歌Authenticator(6位,sha1算法,30秒周期)。
身份验证如何工作
用户必须首先将他们的帐户与TOTP链接起来。这是通过生成存储在用户实体中的共享秘密代码来实现的。用户可以通过手动输入代码和其他属性来配置TOTP算法,也可以通过扫描二维码自动传输信息,将代码添加到TOTP应用程序中。
在身份验证成功时,bundle检查用户实体中是否存储了秘密。如果是这种情况,它将询问身份验证代码。用户必须输入当前显示在TOTP应用程序中的代码才能获得访问权限。
基本配置
要启用此身份验证方法,请将此添加到您的配置中:
1 2 3
scheb_two_factor:你觉得:启用:真正的
您的用户实体必须实现Scheb
.要为用户激活此方法,请生成一个秘密并定义TOTP配置。TOTP让你配置数字的数量,算法和临时代码的周期。
谨慎
请注意,自定义配置将不再与谷歌Authenticator应用程序的默认值兼容。你必须使用另一个应用程序(例如Android上的FreeOTP)。
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
<?php名称空间Acme\演示\实体;使用学说\ORM\映射作为ORM;使用Scheb\TwoFactorBundle\模型\你觉得\TotpConfiguration;使用Scheb\TwoFactorBundle\模型\你觉得\TotpConfigurationInterface;使用Scheb\TwoFactorBundle\模型\你觉得\TwoFactorInterface;使用ob娱乐下载\组件\安全\核心\用户\用户界面;类用户实现了用户界面,TwoFactorInterface{/ * * *@ORM\Column(name=" toppsecret ", type="string", nullable=true) */私人字符串?$totpSecret;/ /[…]公共函数isTotpAuthenticationEnabled():保龄球{返回$这->totpSecret吗?真正的:假;}公共函数getTotpAuthenticationUsername():字符串{返回$这->用户名;}公共函数getTotpAuthenticationConfiguration():哦?TotpConfigurationInterface{//您可以在用户实体中持久化其他配置选项,以使每个用户独立。返回新TotpConfiguration ($这->totpSecret, TotpConfiguration::ALGORITHM_SHA1,20.,8);}}
配置选项
1 2 3 4 5 6 7 8 9 10 11
scheb_two_factor:你觉得:启用:真正的如果需要启用TOTP认证,默认为falseserver_name:服务器的名字#二维码中使用的服务器名称发行机构:发行人的名字#二维码中使用的发行人名称亮点:1#取决于使用的Spomky-Labs/otphp版本:#直到v10:在当前代码之前/之后将接受多少代码#从v11开始:以秒为单位的可接受时间漂移参数:#二维码中增加的额外参数图片:“https://my-service/img/logo.png”模板:安全/ 2 fa_form.html.twig用于呈现身份验证表单的模板
额外的参数
您可以设置附加参数,这些参数将被添加到供应URI中,该URI包含在QR码中。参数对于所有用户都是通用的。自定义参数可能不是所有应用程序都支持,但自定义QR码可能非常有趣。在下面的例子中,我们添加了一个图像
参数中包含服务标志的URL。一些应用程序,如FreeOTP,支持此参数,并将QR码与该标志关联。
1 2 3 4
scheb_two_factor:你觉得:参数:图片:“https://my-service/img/logo.png”
自定义认证表单模板
bundle使用资源/视图/认证/ form.html.twig
以呈现身份验证表单。如果你想使用不同的模板,你可以简单地在配置中注册它:
1 2 3
scheb_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
生成密码
服务scheb_two_factor.security.totp_authenticator
提供了一个为TOTP身份验证生成新秘密的方法。连接的Scheb
也是可能的。
1
$秘密=$容器->get (“scheb_two_factor.security.totp_authenticator”)->generateSecret ();