Open ycyn521 opened 9 years ago
判断一个用户是mac+pwd,还是phone+password的依据:account中的password是否为空;如果为空,则用mac+pwd,如果不为空,则用phone+password;用户可以通过设置password或者清空password,在两种模式间切换
不论采用哪种方式,都应维护account下的mac表。不再使用的mac,设置enable=0;如果enable=0的mac,又通过了短信认证,或者上网码认证,则enable=1,再次激活
共四种方式 mac+上网码
老用户,新mac,上网码有对应的phone : 新account - mac记录,enable=1 老用户,新mac,上网码无对应phone(临时上网码) : 新account - mac记录,enable=0 老用户,老mac enable=0 :update account -mac记录,enable=1(认证模式mac+pwd,phone+password均可) 新用户 :新account记录,新account -mac记录
mac+验证码
老用户,新mac : 新account - mac记录(默认enable=1,临时上网码enable=0) 老用户,老mac enable=0 ,认证模式mac+pwd:update account -mac记录,enable=1 老用户,老mac smscheck=1 ,认证模式mac+pwd:update smscheck=0?enable=1 新用户 :新account记录,新account -mac记录,enable=1
mac+pwd
老用户,老mac enable=1,认证模式mac+pwd
phone+password
老用户,新mac,认证模式phone+password : 新account -mac记录,enable=1 老用户,老mac enable=1,认证模式phone+password : 无数据库更新操作 老用户,老mac enable=0,认证模式phone+password : update account-mac记录,enable=1
验证码/上网码表 or token表:现我们称之为x表
上网码为一次性使用,使用后失效,(期限限制?)
1,销售顾问/客服前台/销售经理,在其webapp上有一个发上网码的入口(默认是给顾客发上网码) 2,发码者决定是否要手机号:
如果要手机号,则手机号写入X表
发码者决定是否验证这个手机号:
如果要验证手机号,则上网码写入x表,标记为短信发送,发短信进程把上网码发给手机号 如果不验证手机号,则上网码写入x表,并显示在销售顾问屏幕上,直接呈现给顾客
如果不要手机号,则上网码写入x表,并显示在销售顾问屏幕上,直接呈现给顾客
1,顾客连接matrix,进入login页面 2,在 [请输入手机号/上网码]框中输入上网码,点击[进入] 3,前端判断这是一个上网码,提交mac,上网码,(type=上网码)到rest 4,rest接收mac,上网码,(type),到x表中查找
如果没有找到上网码,则返回上网码错误 如果找到上网码,则:
看上网码record中的电话号码
如果有phone,则是一个常规的上网码, 用phone查找account
如果account中有phone记录,这是一个老用户,判断是凭mac+password1登录,还是凭phone + password2登录?
凭mac+password1登录:把mac绑定到account(新建/更新?),记录src数据来源字段,返回成功值 凭phone + password2登录:把mac绑定到account(新建/更新?),记录src数据来源字段,返回成功值
如果account中没有phone记录,这是一个新用户:创建accounts,绑定mac到account,返回成功值
如果没有phone,则是一个临时的上网码
查找该上网码对应的销售顾问account 把该mac绑定到销售顾问account(新建/更新?),并disabel此记录,记录src数据来源字段,返回值(空的account,不要返回销售顾问的account)
5,前端接收rest的返回值:
失败,提示错误 成功(常规):设置cookie,接通internet,根据userrole显示页面 成功(临时):设置cookie? 接通internet,显示一个没有account的页面
验证码/上网码表 or token表:现我们称之为x表
验证码为一次性使用,使用后失效,(且有时间期限?)
1,顾客连接matrix,进入login页面 2,在 [请输入手机号/上网码]框中输入上网码,点击[进入] 3,前端判断这是一个手机号,提交mac,手机号,(type=手机号?)到rest 4,rest判断手机号+mac组合的account状态,如果需要短信认证(此处逻辑另论),则返回值给前端 5,前端根据返回值,显示 [获取验证码]按钮,同时显示[输入验证码]框 6,用户点击获取验证码,前端发送mac,手机号到rest 7,rest生成一个验证码,写到x表,标记为短信发送,由短信发送进程发送到手机号
1,顾客收到验证码,输入到框中 2,前端提交mac,手机号,验证码到rest 3,rest接收mac,验证码,手机号,到x表中查找
如果没有找到验证码,则返回验证码错误 如果找到验证码,则到account中查找phone对应的account
如果account中有phone记录,这是一个老用户,判断是凭mac+password1登录,还是凭phone + password2登录?
凭mac+password1登录:把mac绑定到account(新建/更新?),记录src数据来源字段,返回成功值 凭phone + password2登录:把mac绑定到account(新建/更新?),记录src数据来源字段,返回成功值
如果account中没有phone记录,这是一个新用户:创建account,绑定mac到account,返回成功值
5,前端接收rest的返回值:
失败,提示错误 成功:设置cookie,接通internet,根据userrole显示页面
当用户在login页面输入手机号,前端把mac,phone,(type=手机号)提交给rest rest接收后: 查account中的phone
如果没有phone,这是一个新用户,则返回需要验证码验证的结果 如果有phone,这是一个老用户,判断是凭mac+mac-password登录,还是凭phone + account-password登录
如果account下的passwrod为空:凭mac+mac-password登录:则返回需要验证码验证的结果 如果account下的password不为空:凭phone + account-password登录
如果smscheck=1,则返回需要验证码的结果 如果smscheck=0,则返回需要密码验证的结果
??? smacheck是在account级别,还是放在mac级别???
1,老用户在个人中心设置了密码(增强的安全性),account下的password保存了密码值 2,该account下的mac记录状态更新为disable 3,用户输入手机号后,rest判断这是一个需要密码登录的用户,返回状态给前端 4,前端接收凭密码登录的结果 5,在页面上显示[请输入密码] 6,提交mac,phone,密码给rest 7,rest判断密码正确性
不正确,返回错误提示 正确
则绑定mac到account(新建/更新?); 返回结果给前端
子函数:1),用cookie:mac查找account,如果查到xxx,如果没查到xxx 2),用cookie:mac + cookie:phone查找account 如果查到xxx,如果没查到xxx
1,用户连接matrix 2,向rest提交mac,cookie:mac-pwd,cookie:phone,cookie:account-pwd 3,rest检查cookie:phone cookie:account-pwd
如果cookie:phone cookie:account-pwd均不为空,检查account table中phone+account-pwd组合
如果有匹配 : 返回成功,account (account-pwd成功) 如果没有匹配 : (account-pwd失败:是password不对?还是用mac-pwd认证)
用mac + cookie:phone组合,查找account
如果找到account,检查该account对应的password字段
如果不为空 : 返回需要密码认证,phone (account-pwd认证,但是密码不对) 如果为空 : 用cookie中mac+mac-pwd组合,查找account(用mac-pwd认证)
如果有匹配 : 返回成功,account 如果没有匹配 : 返回需要验证码认证,phone
如果没有找到account,用cookie:phone查找account
如果找到account,检查该account对应的password字段
如果不为空 : 返回需要密码认证,phone (account-pwd用户,加新mac) 如果为空 : 返回需要验证码认证,phone (mac-pwd用户,加新mac)
如果没有找到account,返回需要验证码认证,phone(新用户,加新mac)
如果mac cookie:phone均不为空,用mac + cookie:phone组合,查找account(步骤同上)
如果mac不为空,用mac查找account
如果找到唯一的account,查 account table中的password
如果为空,返回需要验证码认证,phone 如果不为空,返回需要密码认证,phone
如果找到0个或者2个以上account,返回失败,按新用户,新mac处理
其他情况(mac为空,手动指定ip地址的情况):返回失败,按新用户,新mac处理
前端向rest发送:mac,cookie:mac-pwd,cookie:phone,cookie:account-pwd
account-pwd的优先权高于mac-pwd;phone的优先权高于mac mac是由前端发送,还是ihost根据ip地址自行判断? 如果用户手工设置了ip地址,而非hotspot分配,根据ip地址反查mac查不到(此时客户端好像能访问ihost)
0,前端发给rest的没有mac地址(或者ihost无法确定mac地址)
返回错误
1,前端发给rest的只有mac地址: rest返回:
可识别的mac,对应到唯一的account,返回account的phone,所要求的认证模式mac-pwd or account-pwd 其他,无法确定account,用mac-pwd认证(新用户,新mac)(不可识别的mac,mac对应到多个account)
2,前端发给rest的有mac + mac-pwd: rest返回:
可识别的mac + mac-pwd,对应到唯一的account,返回account 可识别的mac + mac-pwd,对应到唯一的account,但account需要account-pwd认证,返回phone 可识别的mac,对应到唯一account,需要account-pwd认证,返回phone 可识别的mac,对应到唯一account,需要mac-pwd认证,返回phone 其他,无法确定account,按新用户,新mac处理(不可识别的mac,mac对应到多个account,或者mac + mac-pwd对应到多个account)
3,前端发给rest的有mac + phone: rest返回:
可识别的mac + phone,对应到唯一account,需要account-pwd认证,返回phone(老用户,老mac) 可识别的mac + phone,对应到唯一account,需要mac-pwd认证,返回phone(老用户,老mac) 可识别的phone,对应到唯一account,需要account-pwd认证,返回phone(老用户,新mac) 可识别的phone,对应到唯一account,需要mac-pwd认证,返回phone(老用户,新mac) 其他,无法确定account,用mac-pwd认证(新用户,新mac)
4,前端发给rest的有mac + mac-pwd + phone: rest返回:
可识别的mac + mac-pwd + phone,对应到唯一的account,此account允许mac-pwd认证,返回account 可识别的mac + mac-pwd + phone,对应到唯一的account,但account需要account-pwd认证,返回phone 可识别的mac + phone,对应到唯一account,需要account-pwd认证,返回phone 可识别的mac + phone,对应到唯一account,需要mac-pwd认证,返回phone 可识别的phone,对应到唯一account,需要account-pwd认证,返回phone(老用户,新mac) 可识别的phone,对应到唯一account,需要mac-pwd认证,返回phone(老用户,新mac) 其他,无法确定account,用mac-pwd认证(新用户,新mac)
5,前端发给rest的有mac + mac-pwd + phone + account-pwd: rest返回:
可识别的phone + account-pwd,返回account 可识别的mac + mac-pwd + phone,对应到唯一的account,此account允许mac-pwd认证,返回account 可识别的mac + mac-pwd + phone,对应到唯一的account,但account需要account-pwd认证,返回phone 可识别的mac + phone,对应到唯一account,需要account-pwd认证,返回phone 可识别的mac + phone,对应到唯一account,需要mac-pwd认证,返回phone 可识别的phone,对应到唯一account,需要account-pwd认证,返回phone(老用户,新mac) 可识别的phone,对应到唯一account,需要mac-pwd认证,返回phone(老用户,新mac) 其他,无法确定account,用mac-pwd认证(新用户,新mac)
6,前端发给rest的有mac + phone + account-pwd: rest返回:
可识别的phone + account-pwd,返回account 可识别的mac + phone,对应到唯一account,需要account-pwd认证,返回phone 可识别的mac + phone,对应到唯一account,需要mac-pwd认证,返回phone 可识别的phone,对应到唯一account,需要account-pwd认证,返回phone(老用户,新mac) 可识别的phone,对应到唯一account,需要mac-pwd认证,返回phone(老用户,新mac) 其他,无法确定account,用mac-pwd认证(新用户,新mac)
7,其他: rest返回:
其他,无法确定account,用mac-pwd认证(新用户,新mac)
1,前端不上传mac,由ihost根据ip确定mac,然后下发给前端
在hotspot 推送的url里面的mac=xxxx
2,ihost同时下发hotspot的mac,给前端cookie做ihost指纹使用
在hotspot 推送的url里面的called=xxxx
跳板网页:hotspot推送给用户浏览器的页面
用户连接matrix 多数情况下,手机会自动发起一个internet访问。此访问会被hotspot截获,引导用户手机浏览器打开跳板网页:
http://mtxwifi.net/wap/index.php? res=notyet& uamip=172.16.0.1& uamport=3990& challenge=062421561d463481a8d36d968470ad04& called=7C-DD-90-21-7E-B1& mac=00-73-E0-67-42-E2& ip=172.16.0.101& nasid=nas01& sessionid=54d4bd2a00000002& userurl=http%3a%2f%2fclients3.google.com%2fgenerate_204
如果手机不自动发起internet访问,则当用户打开浏览器,输入internet网址时,浏览器会打开跳板网页
如果用户打开浏览器,不输入internet网址,而是输入mtxwifi.net等wlan上的网址,则可以直接访问目标网址,不会打开跳板网页
如果用户在上网过程中hotspot关闭其上网通道(手动强制关闭,或者session timeout等其他策略性关闭),则用户再想访问internet时,会再次打开跳板网页
跳板网页由ihost上的java程序处理,然后发给前端的angular呈现给用户 ihost收到跳板网页request的两种方式
1) 由hotspot引导用户访问跳板网页(首次访问internet,或者上网过程中internet关闭,再次访问internet);此时url里面带有原始参数,此参数将用于接通internet 2) 直接输入跳板网页;或者刷新浏览器,访问跳板网页;此时url中无参数(无原始参数)
angular缓存对跳板网页的影响: 1,用户直接输入跳板网页,无原始参数访问跳板网页,完成或者不完成用户登录流程;angular缓存了此网页;然后用户访问internet,hotspot引导用户访问带原始参数的跳板网页 2,ihost间漫游:用户在ihost a访问了带原始参数的跳板网页,在浏览器不关的情况下,接入到ihost b上,再次访问带原始参数的跳板网页(参数中的challenge、called不同)
接收并处理跳板网页的java程序的处理逻辑???
1,用户连接matrix 2,hotspot推送跳板网页,或者主动发起访问ihost上的某个页面 3,ihost下发angular,在手机端启动angular;angular去ihost上取目标页面 4,ihost判断是否需要确定用户account,如果不需要,返回目标页面;如果需要,返回登录页面 5,前端收到并处理登录页面:
通过rest向ihost取指纹 用指纹取cookie中的mac-pwd,phone,account-pwd数据 用mac=‘’,mac-pwd,phone,account-pwd向ihost申请登录 ihost rest根据ip查mac,然后根据mac、mac-pwd,phone,account-pwd组合,在数据库中查询,并向前端返回结果(见comment:前端向REST请求认证总结)
rest 要向前端返回mac
如果找到account,前端更新cookie;
根据跳板网页参数情况,接通internet; 如果此时没有原始参数的信息,不接通internet。等用户需要访问internet,引导到带原始参数的跳板网页时,再接通internet(此时已不需要登录了,只接通internet)
如果找到account,需要account-pwd登录,则显示手机号(预填充)、密码页面,以及找回密码链接、重新注册链接(重新注册相当于取消该手机号的account-pwd,用短信验证码的方式,恢复到普通安全等级)
如果修改了预填充的手机号,则向rest提交mac+phone,重新确定account
如果找到account,需要mac-pwd登录,则显示手机号(预填充)、获取验证码页面
如果修改了预填充的手机号,则向rest提交mac+phone,重新确定account
如果没有找到唯一确定的account,则提供"请输入手机号或者上网码"页面,等用户输入后提交给rest
如果输入了手机号,则向rest提交mac+phone 如果输入了上网码,则向rest提交mac+上网码(此时rest根据上网码,到码表中查找phone,也许有,也许没有;没有的话查销售顾问id,绑定mac到销售顾问id并disable此记录)
如果出错,显示错误页面
6,进入到下一步注册/登录环节
1,清除cookie:mac-pwd,cookie:account-pwd 2,调用rest,关掉internet通道