本文主要从以下三个维度来展开:
1、账号系统的能力;
2、账号体系的变迁;
3、账号系统的稳定与发展;
账号系统我们称之为“PASSPORT”,它主要负责的是生成账号、登录、鉴权、安全,还有其最基本的功能。
一个客户要用某一个应用,要在应用中操作,如要下单、发表自己的信息等,首先就需要在对应应用中有代表本人的“标识”。那这个“标识”,我们称之为"账号";
在上图示例中,我们可以看到,账号的产生,账号与操作者的关系,也明确得出“手机号=账号(uid)”;
到家的账号生成的依据是手机号,手机目前是人们生活中不可缺少的一部分,没有了手机如同没有方向,当然使用手机号。使用手机号的目的有三点考虑:1、安全;2、简单;3、易记。还有就是符合到家的服务性质,到家的服务主要是以移动方式提供给客户。客户手中可能有多个手机号,因此一人也可以注册多个账号,在系统设计上需要考虑幂等性(保证相同手机号注册写入时只能保证一个写入成功);
我们在使用某些应用的时候,经常首先提示我们登录,那我们可以考虑一下这个登录是如何实现的,登录中我们需要考虑些什么,它职责是什么,那我将从以下三个方面来谈谈;
登录方式是在安全的前提下,为方便客户的使用与减少一定成本提供的多种方式,当然有些方式也是为了能将我们自己的服务引入到其他受客户喜爱的应用中,并且要能做到方便快捷的引入;
目前互联网产品的载体也较多,如pc,手机,平板等,因此登录渠道也就多起来了;
(说明:为了安全,图中token组成顺序并非真实)
•AUTH2
OAuth协议,是一种授权协议,不涉及具体的代码,只是表示一种约定的流程和规范。OAuth协议一般用于用户决定是否把自己在某个服务商上面的资源(比如:用户基本资料、照片、视频等)授权给第三方应用访问。此外,OAuth2.0协议是OAuth协议的升级版,现在已经逐渐成为单点登录(SSO)和用户授权的标准•TOKEN
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token并将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次用账号登录
登录的主要任务就是确保客户登录时使用的账号信息正确 如:手机号+短信验证码 确保是否能正确匹配,匹配后根据token生成规则生成登录成功的token信息,并返回给客户端与存储在服务侧,存储在服务侧是为了后续的鉴权;
由于登录有方式的不同,渠道的不同,也有业务的不同,在服务设计时,为了便于拓展及后续数据有效性的统计,需要建立一个统一的登录模型;
鉴权与登录是有直接关系的,鉴权就是保证客户成功登录后产生的token信息是合法的且正确的,简单来说:用户在同一个设备的应用中登录过一次之后,没有特意退出的情况,30天内不需要重新登录,这里的30天不需要重新登录就是鉴权的作用,它主要是验证当前用户操作时服务请求携带的token信息是否正常,是否有效;
业务服务是如何引用鉴权动作的,账号系统是如何支持业务服务鉴权的,说到这里,我们的同学应该能想到用什么方式,是的没有错,是用拦截器
的方式提供给业务服务引用的,其实拦截器中的重要的鉴权逻辑是在账号服务侧,也就是拦截器只是一个入口,在这里可以想想为何要如此设计,这样设计有什么好处,又会有什么是我们需要考虑的?
上面提到了鉴权逻辑是在账号服务侧,这样的好处是可以控制鉴权规则,鉴权规则有本地数据鉴权
,远程数据鉴权
;
所谓本地数据鉴权就是 只是校验 客户端请求时携带的token信息本身是否 可以正常解密 是否合法,满足token生成规则且token自身在有效时间段中,不对请求携带的token信息与服务侧是否存在做校验,可以降低服务侧存储介质的压力,来保证服务的稳定;
远程数据鉴权与本地数据鉴权的差异就是会 对请求携带的token信息与服务侧是否存在做校验,这种规则是特别安全可靠的;
两种鉴权规则可以根据不同情况进行使用,主要为的是 在不影响客户使用的情况下保证服务的稳定与安全,因此有开关控制;
说到”安全“,这个词是互联网行业中最为核心的,账号系统也不例外, 在账号系统中 需要特别重视的安全隐患有 账号安全
,服务轰炸
;相信大家对这两个词一点不陌生;
频繁请求会造成服务的压力,特别有可能会使服务宕机等;
频繁发送验证码对应短信是成本服务因此需控制成本,不可出现没有必要的损失等;
暴力破解对于我们客户的账号安全有威胁等;
基于以上问题,我们对安全的考虑也就应该针对这些问题出相应的策略;相应的策略如图所示,当然会很多种方式,在这里我就不再展示描述了,但是这个点对于账号系统而言是极其重要的,重要、重要、重要
, 账号服务是应用的大门,没有安全可言如同大门敞开;
•变更及注销
这两个功能在账号服务中是极其重要的基础功能,主要是服务于客户,让客户感觉到对于自己的账号有一定的自主权,也是方便于客户的需求;
账号体系的变迁标志着账号系统的定位有所不同,账号系统是不区分客户身份的,它很单纯只是账号体系,最早的账号系统是用户侧与商家侧各有各的体系,这种情况会使业务拓展及服务维护的成本成倍的增加,业务与服务复杂度也在增加,因此系统的定位极其重要; 账号体系的变迁示意如下:
如上图所示,要做到商家体系也集成到passport,那么要解决以下几个问题:
1.先保持对应的uid(passportid)与cpid(商家id),找出两个体系的共同点,通过共同点之间建立映射关系
;
2.打通登录(passport登录后商家侧也能自动登录);
3.平滑过度兼容(拦截器可以支持两种鉴权);
如下图所示:
图1:打通登录
图2:拦截器兼容
以上几点保证后可完成体系变迁,从一个体系变迁到另一个体系中,完成统一;
系统在保证能力的情况下,需要考虑系统的稳定与发展,好的规划决定着系统的寿命,如果一个系统没有合理的规划与长期的考虑,被替代是迟早的问题。
我们应该考虑哪些点将可能会成为影响系统稳定的因素,保证高可用,满足高并发,对于账号系统来说,最核心的其实有两点,鉴权
是调用量最高的一处,保证了它的稳定,服务也将可以维持一定的稳定;另一个就是容量
,账号数量将会越来越多,因此需要考虑分区存储,至于具体如何分将不在这展示说了,我们可以结合我们的账号生成性质来考虑一下。
系统发展到一定程度之后,它需要有健全的业务监控机制,监控机制这个词不陌生吧,系统、应用、服务都会有不同维度的监控,监控就是时时刻刻监控着服务的运行情况,帮助技术、运维等人能及时的掌握服务的情况,账号系统的监控也不可或缺,及时引入预警,时刻关注业务服务的引入及客户的使用情况。
本文只是对账号系统的一点浅谈,希望喜欢的同学从中有所得,感谢支持!