利用PHP实现用户登录时的Multi Factor Authentication 多点身份验证

多点身份验证 Google Authenticator

分类: 网站开发

最近刚刚利用Google的API 为客户实现了 Multi Factor Authentication (多点身份验证),以确保管理员登录时的绝对安全安全。对于一些大型的服务类公司来讲
这也是至关重要的功能之一, 它的实现,主要借助Google Authenticator,会比从零开始要容易得多,所以我想与大家分享这些经验,以帮助尚未完成此工作的其他人。

先简要说一下概念:

什么是Multi Factor Authentication (多点身份验证)?
这不是什么新鲜事物。实际上,它已被大多数主要平台(Facebook,Apple,Google等)广泛采用,以使帐户登录更加安全。
由于一般就采取2种方式结合在一起进行身份验证,因此我们也称它为2FA,两步验证或TFA(缩写).
在用户登录时, 它不仅需要一般的密码和用户名,而且还需要一个额外的口令,且仅该用户拥有的获得此口令的途径,常用的例如例如物理令牌。

困难的地方,在于如何让用户如何获得口令?
从历史上看,这要求用户随身携带小部件或读卡器设备(在银行帐户的情况下),以生成唯一的口令。
最近,一种流行的方法是向用户发送带有一次性使用代码的手机短信(您需要单独为此类短信付费)或者电子邮件。
但是,还有其他选择, 那就是 Google Authenticator应用程序了.

Google Authenticator是一款免费的智能手机应用程序,可每30秒生成一次新密码。它是这样的:
启用2FA后,您要保护的应用程序会生成一个QR码,用户可以使用手机摄像头对其进行扫描,以将个人资料添加到其Google Authenticator应用中。
然后,用户的智能手机每30秒生成一个新代码,以用于对应用程序进行身份验证的第二部分: 即上面说的口令。

使用PHP在您的网站上实现Google Authenticator
最简单的方法是使用 sonata-project/google-authenticator 库为您完成棘手的工作,您可以通过 composer 进行安装. https://packagist.org/packages...
该库将为你的程序完成以下功能:
- 当用户启用2FA时,生成供用户扫描的QR码。注意一定要将 Salt 值用作密钥的一部分会增加安全性。
- 验证输入的代码在登录时有效: 验证输入的密码时, 您需要使用与生成条形码相同的密码来验证用户的输入。

虽然Google Authenticator对于您的客户而言可能不是最理想的2FA方法,比如客户需要我们自己去实现特定的APP已经管理口令的服务器端程序。但这不要紧,
仔细研究以上的流程和库,可以大大减少开发的时间,而且也保证了系统足够的健壮.

需要额外提到的一点,是在用户登录表的设计上要足够的灵活, 不能强制要求用户必须采用2FA. 可以考虑通过用户组的方式,对2FA的用户单独进行管理.

维墨科技 全职高手

一枪穿云@维墨科技

系统架构师/专业网站应用程序开发工程师; Master of PHP/AWS/网络服务, 20年IT行业经验; 精通各种前后端开发技术, Linux/Laravel/WordPress/VueJS/ElementUI 作为主要武器; SmartBro电子商务平台的主要开发者

职务: 全栈工程师 银武: 枪火 碎霜