近年来,手机号码已成为认证的重要因素,因此越来越多的企业采用短信的方式来获取用户的手机号码。
在典型情况下;
- 用户正在与之交互的 GUI(无论是网站还是应用程序)要求用户输入她/他的手机号码
- 然后服务器生成一个令牌和
- 将该令牌发送到提供的手机号码
- 那么用户必须切换到一个新的 GUI 例如,如果原来的 GUI 是一个网站,用户必须切换到她/他的移动设备才能在 SMS 收件箱中找到收到的消息。如果用户最初在应用程序中,则相同。在这种情况下,用户必须在她/他的智能手机上切换到 SMS 管理器应用程序
- 然后,用户必须将收到的令牌复制或记忆到
- 然后用户必须切换回原来的 GUI 和
- 将复制或记忆的令牌输入原始网站或应用程序,然后
- 击键(例如)和
- 等待服务器处理输入的令牌
- 最后,服务器验证输入的令牌,如果正确,则授权该手机号码,并将其设置为用户的身份验证方式,
- 最终结果显示在 GUI 上
这是大多数知名 IT 公司(如 Google、Facebook 等)用来授权其用户的典型场景。
现在假设另一种情况,
- 用户正在与之交互的 GUI(无论是网站还是应用程序)要求用户输入她/他的手机号码
- 然后服务器生成一个令牌和
- 在同一 GUI 中向用户显示该令牌,并要求用户使用用户输入的手机号码将其发送到指定号码(服务器消息中心号码 = SMCN)。
- 用户可能必须复制或记住显示的令牌,
- 然后用户必须切换到新的 GUI,例如,如果原始 GUI 是网站,用户必须切换到她/他的移动设备以键入令牌并将其发送到 SMCN。如果用户最初在应用程序中,则相同。在这种情况下,用户必须切换到她/他的智能手机上的 SMS 管理器应用程序来发送令牌。但是在这种情况下,应用程序可能会使用智能设备的编程 API 来调用 SMS Launcher 并代表用户预先填写消息的地址和内容。
- 用户只需将消息发送到 SMCN,
- 然后用户必须切换回原来的 GUI 和
- 点击一个键以声明令牌已发送到服务器,并且
- 等待服务器处理输入的令牌
- 最后,服务器验证输入的令牌,如果正确,则授权该手机号码,并将其设置为用户的身份验证方式,
- 最终结果显示在 GUI 上
现在的问题是,如果有的话,在安全性和其他因素方面哪种方法更好?
编辑:
我已经根据@Andre 编辑和回答更新了问题,以便更好地理解,
首先,这两种方法都可以用于身份验证和授权。假设有人登录了她/他的网上银行账户并想要转账,这里提到的方法可以用来授权用户并允许她转账或不转账。
其次,让我们专注于比较这两种方法,而不是谈论在authN和authZ过程中使用短信的缺点。
第三,比较两种选择,(如我之前所说)在这两种情况下,用户都必须记住或复制某些内容,然后将一个环境留给另一个环境并键入或粘贴它。因此,听起来,就可用性而言,两种方法是相同的;与方法一一样,用户必须将在 SMS 中收到的内容输入到原始 GUI 中,而在方法二中,用户必须将在原始 GUI 中看到的内容输入到 SMS 发送|接收 GUI 中。因此,在这两种情况下,用户都可能会出错。