Print

iMC EIA微信认证无法唤起微信客户端进行连接wifi导致微信用户不能上线的经验案例

2017-05-21 发表

随着微信越来越普及,微信认证越来越普遍。

微信认证是指iMC EIA与微信服务器联动,通过微信客户端来验证用户身份合法性的一种认证方式。

目前EIA支持的微信认证方式主要有三种:

·            公众号认证:该方式是用公众号的菜单方式进行上网,公众号菜单需要由iMC配置,不支持编辑模式(不支持nat环境)

·            微信连Wi-Fi:该方式是微信公众平台推出的认证流程,只需要开通微信连Wi-Fi插件即可。

iMC不需要接管公众号的菜单配置,所以不会影响已在使用的公众号功能。(支持nat环境)

·            OAuth认证:该方式同公众号一样使用菜单方式上网,该方式支持编辑模式(不支持nat环境)

微信连wifi方式由于支持NAT环境,不影响公众号的功能而应用比较普遍。iMC EIA 7.2版本已经支持微信认证,目前常见的微信认证的版本为7.2 E0411P01及其后续版本(7.2 E0408版本也是支持的,但是目前基本都采用7.2 E0411P01及其后续版本),有的时候会由于一些配置问题或者网络问题导致微信认证不成功,无法唤起手机终端的微信客户端导致无法正常认证,下面分享一个微信认证无法唤起微信客户端的案例。

终端浏览器上认证页面正常跳转,但是选择“一键打开微信连Wi-Fi”的时候无法正常唤起微信客户端导致认证失败。

解决微信认证问题一般需要收集三个信息:

1.前台日志文件

2.UAM调试级别的日志

3.Portal调试级别的日志。

收集方法请参考文章后面的建议与总结。

首先通过分析现场的前台日志文件,发现在用户复现问题测试的时间点上前台日志,有如下报错:

2017-02-20 10:08:20 [ERROR] [http-nio-8080-exec-21] [com.imc.weixin.controller.PortalAuthController::creatTempUser] 临时用户认证失败,userip=192.168.2.58
2017-02-20 10:08:49 [INFO ] [http-nio-8080-exec-2] [com.imc.weixin.controller.PortalAuthController::authentificate] portal认证失败。状态码为:7,E63632:绑定终端数量达到限制。
2017-02-20 10:08:49 [ERROR] [http-nio-8080-exec-2] [com.imc.weixin.controller.PortalAuthController::creatTempUser] 临时用户认证失败,userip=192.168.0.58
2017-02-20 10:09:00 [INFO ] [schedulerFactory_Worker-6] [com.imc.weixin.job.WeiXinUserInfoJob::execute] weixin WeiXinUserInfoJob start====
2017-02-20 10:09:00 [INFO ] [schedulerFactory_Worker-6] [com.imc.weixin.job.WeiXinUserInfoJob::execute] weixin WeiXinUserInfoJob end====
2017-02-20 10:09:31 [INFO ] [http-nio-8080-exec-22] [com.imc.weixin.controller.PortalAuthController::authentificate] portal认证失败。状态码为:7,E63632:绑定终端数量达到限制。
2017-02-20 10:09:31 [ERROR] [http-nio-8080-exec-22] [com.imc.weixin.controller.PortalAuthController::creatTempUser] 临时用户认证失败,userip=192.168.2.44
2017-02-20 10:09:49 [INFO ] [http-nio-8080-exec-25] [com.imc.weixin.controller.PortalAuthController::authentificate] portal认证失败。状态码为:7,E63632:绑定终端数量达到限制。
2017-02-20 10:09:49 [ERROR] [http-nio-8080-exec-25] [com.imc.weixin.controller.PortalAuthController::creatTempUser] 临时用户认证失败,userip=192.168.1.76

然后查看相同时间点的UAM调试级别的日志,有如下报错:

%% 2017-02-20 10:09:49.509 ; [WARN] ; [20272] ; MacReg ; usrMacMatchChk: user-auth blocked for the sum of terminals used by User[诸暨] reaching max-value 10.//提示临时用户已经达到最大值10
%% 2017-02-20 10:09:49.509 ; [ERR] ; [20272] ; LAN ; ProcLanUserAuth: Fail to call usrBindingCheck. Error Message: E63632: The number of bound endpoints reached the upper limit.//提示绑定终端失败,失败原因为绑定的终端数达到限制。
%% 2017-02-20 10:09:49.509 ; [ERR] ; [20272] ; LAN ; lanAuthor.exec: failed to check the request message, retCode: 63632.
%% 2017-02-20 10:09:49.509 ; [ERR] ; [20272] ; LAN ; lanAuthMsgProc.finsh: fail to authenticate the request message, retCode: 63632.
%% 2017-02-20 10:09:49.509 ; [LDBG] ; [20272] ; LAN ; lanAuthMsgProc.addAuthFailRec: plusauthfailtime called for User(诸暨-0C:77:1A:5F:CF:47).
%% 2017-02-20 10:09:49.510 ; [LDBG] ; [20272] ; LAN ; Begin replyPrivateAttr, auth step is 2, AttrPolicyId is -1, DeviceTypeId is 1100
%% 2017-02-20 10:09:49.510 ; [LDBG] ; [20272] ; LAN ; 诸暨 ; 3 ; bqDNQJCf ; Send message attribute list:
Code = 3
ID = 29
ATTRIBUTES:
Reply-Message(18) = E63632: The number of bound endpoints reached the upper limit.//最终iMC回应了一个CODE 3类型的认证拒绝报文,错误代码为63632,绑定的终端数达到最大限制。

此时查看相同时间点的Portal调试级别的日志,有如下报错:

2017-02-20 10:09:49.506[Portal服务器][调试(0)][23][TimerSendTask::run]packet insert into responseDeviceQueue, send count = 1
2017-02-20 10:09:49.516[Portal服务器][调试(0)][21][ProxyRequestHandler::run]192.168.1.76 ; ACK_AUTH(4) ; 177 ; 192.168.0.2:2000 ; 设备拒绝请求(1) //在设备回应的ACK_AUTH报文中,提示设备拒绝请求,原因为绑定的终端数达到最大限制。
<Content>
    <Head>
        Packet Type:ACK_AUTH(4)
        SerialNo:177
        Address:10.10.14.10
        Port:50908
        RemoteIp:192.168.0.2
        RemotePort:2000
        Version:portal 2.0
        Auth Type:PAP
        ErrorID:1
        UserIP:192.168.1.76
        UserPort:0
        ReqID:0
        Rsvd:0
        attriNum:4
    </Head>
    <Attributes>
        Text Info:E63632: The number of bound endpoints reached the upper limit.
        Device Ip:192.168.0.2
        Session Id:0c 77 1a 5f cf 47
        Device Time Stamp:1486806168
    </Attributes>
</Content>
<OriginalPacket>
    00000000h: 00 00 00 00 00 00 00 00    00 00 00 00 C0 A8 00 02 ;................
    00000010h: 07 D0 C3 B4 02 04 01 00    00 B1 00 00 C0 A8 01 4C ;...............L
    00000020h: 00 00 01 04 97 7F DA 41    E4 0C 0F 36 88 EA 8F 9D ;.......A...6....
    00000030h: 6C B7 B2 79 05 40 45 36    33 36 33 32 3A 20 54 68 ;l..y.@E63632: Th
    00000040h: 65 20 6E 75 6D 62 65 72    20 6F 66 20 62 6F 75 6E ;e number of boun
    00000050h: 64 20 65 6E 64 70 6F 69    6E 74 73 20 72 65 61 63 ;d endpoints reac
    00000060h: 68 65 64 20 74 68 65 20    75 70 70 65 72 20 6C 69 ;hed the upper li
    00000070h: 6D 69 74 2E 0A 06 C0 A8    00 02 0B 08 0C 77 1A 5F ;mit..........w._
    00000080h: CF 47 26 06 58 9E DC 98                               ;.G&.X...
</OriginalPacket>

2017-02-20 10:09:49.516[Portal服务器][调试(0)][46][RequestProcessor::run]Begin processRequest() method.
2017-02-20 10:09:49.516[Portal服务器][调试(0)][46][RequestProcessor::ackAuthEvent]errorCode = 1
2017-02-20 10:09:49.516[Portal服务器][调试(0)][46][RequestProcessor::ackAuthEvent]获取域信息成功, 所基于的公网IP是192.168.1.76、 私网IP是192.168.1.76、代理端接收报文源地址是10.10.14.10、接入端口是AC-vlan-01-0013@vlan
2017-02-20 10:09:49.516[Portal服务器][调试(0)][46][RequestProcessor::processDeviceTimestamp] onlineUser<userKey=-361628771165626767111573337668896162830699986942, userName=诸暨, password=***, status=LOGIN_AUTH_REQUEST_STATUS, userPrivateIp=192.168.1.76, userPublicIp=192.168.1.76, userRemoteIp=10.10.14.10, userRemotePort=49317, clientListenPort=0, userMAC=null, userIp=192.168.1.76, devIp=192.168.0.2, devPort=AC-vlan-01-0013@vlan, lastHeartbeat=1487556589516, OnlineTime=1487556589516, heartbeatOverTime=9223372036854775807, passwdFlag=false, ifInode=false, loginTime=1487556589497, shareKey=hello, serialDeviceNo=177, seriaUserNo=187, deviceTimestamp=1486806168, ip2Status=0, webLanguage=Chinese, userAttrValue=Mozilla/5.0 (iPhone 4S; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 MQQBrowser/7.2.1 Mobile/13E238 Safari/8536.25 MttCustomUA/2 QBWebViewType/1, customPagePath=, ssidAttrValue=null, apAttrValue=null, authType=1, ifClientProtect=false, ifPortalAlOne=false, isTransparent=false, hashValue=, chapId=0> 
2017-02-20 10:09:49.516[Portal服务器][调试(0)][46][RequestProcessor::ackAuthEvent] onlineUser<userKey=-361628771165626767111573337668896162830699986942, userName=诸暨, password=***, status=LOGIN_AUTH_REQUEST_STATUS, userPrivateIp=192.168.1.76, userPublicIp=192.168.1.76, userRemoteIp=10.10.14.10, userRemotePort=49317, clientListenPort=0, userMAC=null, userIp=192.168.1.76, devIp=192.168.0.2, devPort=AC-vlan-01-0013@vlan, lastHeartbeat=1487556589516, OnlineTime=1487556589516, heartbeatOverTime=9223372036854775807, passwdFlag=false, ifInode=false, loginTime=1487556589497, shareKey=hello, serialDeviceNo=177, seriaUserNo=187, deviceTimestamp=1486806168, ip2Status=0, webLanguage=Chinese, userAttrValue=Mozilla/5.0 (iPhone 4S; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 MQQBrowser/7.2.1 Mobile/13E238 Safari/8536.25 MttCustomUA/2 QBWebViewType/1, customPagePath=, ssidAttrValue=null, apAttrValue=null, authType=1, ifClientProtect=false, ifPortalAlOne=false, isTransparent=false, hashValue=, chapId=0> 
2017-02-20 10:09:49.517[Portal服务器][调试(0)][46][RequestProcessor::ackAuthEvent]Add userAgentAndIP to userAgentQueue. usermac is null.
2017-02-20 10:09:49.517[Portal服务器][错误(160010)][46][RequestProcessor::ackAuthEvent]设备回应报文出错,错误码为“1”,错误信息为“设备拒绝请求”,用户名称为“诸暨”
2017-02-20 10:09:49.517[Portal服务器][调试(0)][46][RequestProcessor::ackAuthEvent]用户“192.168.1.76”状态从“LOGIN_AUTH_REQUEST_STATUS”变为“DEL_STATUS”
2017-02-20 10:09:49.517[Portal服务器][调试(0)][46][RequestProcessor::sendLoginRespToUser]errorCode = 1
2017-02-20 10:09:49.517[Portal服务器][调试(0)][22][ProxyResponseClientHandler::run]192.168.1.76 ; CODE_PP_LOGIN_RESPONSE(101) ; 187 ; 10.10.14.10:49317 ; 设备拒绝请求(1)
<Content>
    <Head>
        Packet Type:CODE_PP_LOGIN_RESPONSE(101)
        SerialNo:187
        Address:10.10.14.10
        Port:50300
        RemoteIp:10.10.14.10
        RemotePort:49317
        Version:portal 2.0
        Auth Type:PAP
        ErrorID:1
        UserIP:192.168.1.76
        UserPort:0
        ReqID:0
        Rsvd:0
        attriNum:1
    </Head>
    <Attributes>
        Failure Reason:E63632:绑定终端数量达到限制。
    </Attributes>
</Content>
<OriginalPacket>
    00000000h: 00 00 00 00 00 00 00 00    00 00 00 00 0A 0A 0E 0A ;................
    00000010h: C0 A5 C4 18 02 65 01 00    00 BB 00 00 C0 A8 01 4C ;.....e.........L
    00000020h: 00 00 01 01 39 41 CB 81    74 A4 7B 61 33 F0 9B 06 ;....9A..t.{a3...
    00000030h: E2 E8 2D B2 73 1F 45 36    33 36 33 32 3A B0 F3 B6 ;..-.s.E63632:...
    00000040h: A8 D6 D5 B6 CB CA FD C1    BF B4 EF B5 BD CF DE D6 ;................
    00000050h: C6 A1 A3                                           ;...
</OriginalPacket>

微信连Wi-FI方式需要有一个临时用户。这个帐号名的作用就是用来认证之前临时放通全网,以满足手机终端和微信服务器的交互。在弹出Portal页面的时候,我们会先用这个临时用户进行认证,真正认证的时候会先踢这个临时用户下线,使用正式的微信用户上线。这个临时用户需要配置限制时长,这个可以在接入策略中配置,建议配置成5分钟。(所以需要配置两个服务,对应不同的接入策略,一个给微信用户使用,一个给临时用户使用,只能上线5分钟)此用户设置了临时账户且配置无问题。

微信连Wi-Fi Portal认证方式流程图如下,请参考理解: 如图中所说,需要临时用户先上线,然后返回结果给浏览器,浏览器才会唤起微信客户端进行下一步操作,此案例中临时用户没有上线,故导致无法唤起微信客户端,通过查看前台日志以及UAM和Portal调试级别的日志可以,临时用户不能上线的原因为帐号绑定的终端数达到最大限制,故导致后续的用户无法正常上线了,所以只需要增加帐号绑定的终端最大限制即可解决。      

 

iMC EIA一个帐号绑定终端个数的限制是有三个地方可以配置,分别为系统级别的、接入服务级别的以及接入帐号级别的,限制的范围依次减小,最终此帐号能绑定的最大终端数取决于三个里面的最小值。

系统级别的配置地方如下,默认单帐号最多绑定的终端数为10个:

接着就是接入服务级别的,帐号都是绑定服务的,在配置接入服务的时候也可以限制单帐号最大绑定的终端数,默认的数值是0,0表示不限制,可以绑定任意个终端。配置页面如下:

最后就是单个接入帐号的限制了,每个接入帐号都可以设置最大绑定的终端数,可以不进行配置(里面数值为空),如果不配置的话,默认是不限制,配置界面如下:

 

根据日志里面的报错和用户侧的配置截图,应该是系统级别默认单帐号绑定10个终端达到最大值导致后续用户无法登录的,故在系统配置--终端管理参数配置里面将单帐号最大绑定终端数设置为了2000(只要设置比10个多一些就可以,具体最大可以配置多少参考此页面右上角的帮助),用户再次微信认证就可以认证成功了。

 

 

 

微信认证不成功一般需要反馈如下信息方便分析:

1.前台日志:iMC安装目录\iMC\client\log下imcforeground.log日志。

2.组网情况描述。

3.iMC微信认证配置截图和设备的配置信息。

4.软件版本信息。

5.iMC侧UAM调试级别的日志:先把UAM级别设置为调试,然后复现问题,到UAM的目录下收集日志文件。

UAM日志:iMC安装目录/UAM/log/20xxxxxx.txt 以当天日期命名的文件

6.iMC侧Portal调试级别的日志:先把Portal运行级别设置为调试,然后复现问题,到Portal的目录下收集日志文件。

Portal日志:iMC安装目录/portal/logs/下的日志。

7.测试终端的IP地址和MAC地址以及测试的时间点,方便分析日志。

8.复现问题过程中设备上的debug portal和debug radius的信息。

尽量确保一次性收集好所有的信息,然后可以通过查看里面的日志先简单分析一下,有没有和这个案例中或者其他案例中类似的问题,如果有可以按照案例中的解决方法尝试解决,如果不能解决请拨打华三4008100504热线电话向华三技术支持工程师寻求技术支持。