unissoft-bj / ihostsvc

system services & data services on ihost
0 stars 0 forks source link

逻辑概要图 #18

Open ycyn521 opened 9 years ago

ycyn521 commented 9 years ago

matrix wifi

unissoft-bj commented 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的页面

unissoft-bj commented 9 years ago

验证码/上网码表 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显示页面

unissoft-bj commented 9 years ago

输入手机号后面的判断逻辑:

当用户在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级别???

unissoft-bj commented 9 years ago

凭密码登录

1,老用户在个人中心设置了密码(增强的安全性),account下的password保存了密码值 2,该account下的mac记录状态更新为disable 3,用户输入手机号后,rest判断这是一个需要密码登录的用户,返回状态给前端 4,前端接收凭密码登录的结果 5,在页面上显示[请输入密码] 6,提交mac,phone,密码给rest 7,rest判断密码正确性

不正确,返回错误提示 正确

则绑定mac到account(新建/更新?); 返回结果给前端

unissoft-bj commented 9 years ago

尝试自动登录的过程

子函数: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处理

unissoft-bj commented 9 years ago

前端向REST请求认证总结:

前端向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)

unissoft-bj commented 9 years ago

mac、cookie

1,前端不上传mac,由ihost根据ip确定mac,然后下发给前端

在hotspot 推送的url里面的mac=xxxx

2,ihost同时下发hotspot的mac,给前端cookie做ihost指纹使用

在hotspot 推送的url里面的called=xxxx

unissoft-bj commented 9 years ago

angular缓存对跳板网页的影响

跳板网页: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程序的处理逻辑???

unissoft-bj commented 9 years ago

用户登录/注册过程

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,进入到下一步注册/登录环节

unissoft-bj commented 9 years ago

logout

1,清除cookie:mac-pwd,cookie:account-pwd 2,调用rest,关掉internet通道