• 关于账户登录鉴权系统的要点


    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、面部等其他识别体系:略

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

    以上

  • 相关阅读:
    SPOJ1007 VLATTICE
    hdu 4746Mophues[莫比乌斯反演]
    [Offer收割]编程练习赛13 B.最大子矩阵[枚举]
    [SCOI2011]飞镖[数学模拟]
    2333: [SCOI2011]棘手的操作[离线线段树]
    hdu3507 Print Article[斜率优化dp入门题]
    react 日期
    使用arc进行code review
    css冲突2 要关闭的css在项目代码以外,但是是通过<link>标签引入的css(例如bootstrap):解决方法,在APP.css中使用全局样式
    <svg>标签
  • 原文地址:https://www.cnblogs.com/liuyuhangCastle/p/11504979.html
Copyright © 2020-2023  润新知