1、起因:

 

最近面试一些人,不管是刚培训出来的,还是两三年经验的人,发现对整个登录鉴权系统认识比较肤浅。

同时接触了一个外包项目的测试和验收,竟然发现其登录系统对浏览器记住密码是开放的。不禁自己感觉

对于登录系统,大家的认识差异太大。

 

2、我认为的登录鉴权系统都应包括哪些内容

 

  ①用户名和密码是必须的

  ②个人信息是必须的

  ③用户可以控制自己的登录设备忘记登录数据

  ④登录成功后应该返回什么内容

  ⑤应该允许什么样的登录体系

  ⑥自动登录系统的设计

 

3、一个一个说吧

 

  ①用户名和密码

    当然是必须的,但是用户名是否允许中文,是否允许空格,输入的验证提示,肯定要考虑完善。

 

    比如用户使用的用户名为username,8个字母,当然应该是正常情况通过的。但是如果输入的是赵四,那么只有

    两个字符了,抛开是否允许使用中文的情况下,一般用户名要求是6-32个字符长度,那么这个长度应该是不正确的。

 

    同时,如果对方输入的内容是“tom stave”这样的用户名,那么中间是否允许使用空格,大小写是否应该敏感,都

    是设计用户名系统的限定条件。而且肯定是需要一定的过滤体系的,比如每个IP每天只允许注册3-5个用户,防止

    恶意堆满数据库的情况出现。当然,如果使用短信验证机制来保证就更好了,但是对于初期开发成本比较高,很多

    企业初期也不会选择这种方式。

 

  ②个人信息都应该包括什么,是否应该和用户名和密码保存在同一张表中呢?

 

    如果设计的额内容是一个公网的系统,或者说,要求极其高的速度,同时用户的其他信息又比较多,比如有数十种

    的情况下,用户登录用的表,和用户的信息表应该分开两个表。

 

    比如用户名保存的表为user表,应该包括username,password,同时可以有一个login表,保存登录信息,比如

    登录的ip,时间,check的加密码等等(用户自动登录,而不是回填用户名和密码自动登录),而对于用户信息

    应当重新以user_info表来处理,方便扩展。

 

  ③登出系统的设计

 

    就是注销系统了。注销的时候应该忘记用户已经填写的用户名密码,同时可以删除一部分的cookies或者全部

    来保证其他用户不会跨设备登录,以窃取一些信息。

 

  ④登录成功后应该返回什么内容?

 

    这个是我的一道面试题,通过笔试以后,面试的时候要问更多实操性问题,当然并不偏向于技术,而偏向于项目设计。

    我既然一次请求能够获得返回值了,那么返回值可以自己设计的,回答的都是一个200,一个message之类。

    确实大多数的架构师在设计一个系统的时候,对于绝大多数的请求都会设定标准的返回值,多数是一个status,一个message

  

    我想问的并非这个问题,而是一个与用户登录了,是否要返回该用户的实际信息。而回答让我相当失望,竟然说不需要

    登录成功了即可。难道登录成功以后不要回填一些个人信息么,比如真实姓名,比如个人设置数据么,起码有个欢迎XXX登录

    才对吧。如果用户没有填写这些信息呢,难道刚注册的用户登录的时候,提示欢迎Null登录么?这其中要做多层的判断的,

    信息当然会有缺失,缺失了应该展示什么内容,或者说,返回的数据中,有哪些有意义的,有哪些无意义的。

 

    而对于是否应该返回密码这个问题,他们都回答不可以返回密码,会泄露。word天,返回的数据库密码是加密后的串才对,

    这肯定是单项加密,而不是双向加密,单项加密的加密结果返回了也无法破解,怕什么。

 

  ⑤应该允许什么样的登录体系

 

    登录体系的设计,要考虑的内容实际上蛮多的,从用户注册就开始了,包括数据库表的设计,前后端的各种验证,加密,重复登录,

    自动登录,登出体系,个人信息填写和修改,密码修改,个人头像的上传,历史密码的保存,密码找回功能。除此之外,还有可能

    包括验证码体系,图片验证,滑块验证,拼图验证,或者短信验证等,这样就比较庞大了;

 

    如果是单点登录的体系,还要建立鉴权分享体系,或者是统一的登录注册中心,或者是分布式的共享内存注册中心等方式来保存该

    结果。登录的信息需要记录的很多,不仅仅是登录,其他体系也会考虑是否调用相关信息,以确定防攻击体系,过滤体系的建设等。

 

  ⑥自动登录系统的设计

     

    自动登录系统的设计方式比较多,一般都是一种鉴权模式,根据该鉴权模式来确定当前用户是一个合法用户,然后跳过登录输入用

    户名或密码的过程。一般来说鉴权方式分为以下几种(未说明的或者说错的勿喷)

    1、设备绑定:根据设备的Mac来绑定信息,或者是底层系统账户,如华为账户小米账户这种

    2、ip绑定;最不靠谱的绑定,但是有一些并不需要个人权限的,只需要提供服务的,可以使用此方式,或者说,用户还没有登录账

      户的时候,对于用户的操作进行鉴权,可以使用ip。

    3、用户名密码绑定:略

    4、token绑定:在登录成功以后,会返回一个token,写入用户的机器,可以写入硬盘,也可以写入cookies,该token作为钥匙,与

      密码无直接生成关系,但是在服务器的数据库上,有保持映射关系,因此可以用来使用(本人常用的方式)

    5、其他设备指引登录:使用手机登录之后,指引其他设备登录,如qq,微信等的跨平台同时登录。

    6、其他平台授权登录:略

    7、绑定手机验证:略

    8、面部等其他识别体系:略

 

 总体上来说,就这么多,可能有不足之处,不能说设计一个登录体系,考虑这些就够了,但是也已经比较全面了。

 

以上