Eth*_*han 9 authentication web-applications
我正在为内部应用程序进行注册过程.我的初步设计如下.
我的主要问题是,是否真的有必要包括一个registration_confirmation_code.它是否可以保护应用程序免受现实威胁或仅增加不必要的复杂性?对此我不确定.
用户输入电子邮件地址 由于这是一个内部应用程序,它必须是代理地址.
如果它是有效的代理商地址,则app会在users表中创建一个新行.
该表有一栏registration_confirmed是false默认.应用程序不会让用户登录,除非registration_confirmed是true.
该表有一列registration_confirmation_code是随机生成的字符串.
应用程序向用户输入的地址发送电子邮件.它包含指向允许用户确认其注册并设置其用户名和密码的页面的链接.
该链接具有用户id和registration_confirmation_code查询字符串:
http://agencydomain.com/users?id=123®istration_confirmation_code=fab49dk34nw97d
通过单击链接,用户可以验证他们输入的地址是否有效以及他们是否有权访问该地址.
应用程序按ID查找用户.在允许他们访问可以设置用户名和密码的页面之前,应用程序会检查...
registration_confirmed是false.他们应该只能确认一次注册.
registration_confirmation_coderequest param匹配该用户的DB中的值.这确保了这是目标用户的合法注册确认,而不是其他人用试图劫持注册的随机ID命中URL.
如果一切都结束,应用程序会将他们带到一个页面,其中包含用于设置用户名和密码的表单.
当他们提交包含有效数据的表单时,应用程序设置registration_confirmed为true并且已注册.
另一种方法是使用集中式身份验证并跳过整个注册过程.
首次登录尝试时,从模板创建用户配置文件.
身份验证可以通过多种方式完成.理想情况下,像LDAP(或Active Directory,如果这就是你如何摆动).也可以使用邮件服务器进行身份验证,具体取决于其配置方式.
验证从访问者处收到的任何类型的输入都是一种很好的做法.经验法则是始终确保你得到你所期望的,而不是别的.我说你做得很好,包括电子邮件验证.
但是一个小问题; 为什么要把它分为两个步骤?为什么不允许用户立即输入密码?这通常对用户来说感觉更舒服.
此外,您可能还需要考虑使用用户电子邮件地址的MD5哈希(或类似内容),而不是使用registration_confirmation_code.这样,您不需要额外的字段,如果您愿意,甚至可以省略ID.
戴夫