wifi认证Portal开发系列(三):portal协议
中国移动WLAN业务PORTAL协议规范介绍
一、用户上线认证流程
上线流程完成用户账号的认证,并把认证结果通知Portal Server,Portal server将会通知WLAN用户并且显示相应的认证结果。
用户上线认证方式有两种:CHAP和PAP,其中CHAP方式为必选功能,PAP方式为可选功能。
1.1、用户上线Chap认证流程
- 用户访问网站,经过AC重定向到Portal Server,Portal Server推送认证页面;
- 用户填入用户名、密码,提交页面,向Portal Server发起连接请求;
- Portal Server向AC请求Challenge;
- AC分配Challenge给Portal Server;
- Portal Server向AC发起认证请求;
- 而后AC进行RADIUS认证,获得RADIUS认证结果;
- AC向Portal Server送认证结果;
- Portal Server将认证结果填入页面,和门户网站一起推送给客户;
- Portal Server回应确认收到认证结果的报文。
1.2、用户上线Pap认证流程
- 用户访问网站,经过AC重定向到Portal Server,Portal Server推送认证页面;
- 用户填入用户名、密码,提交页面,向Portal Server发起连接请求;
- Portal Server向AC发起认证请求;
- 而后AC进行RADIUS认证,获得RADIUS认证结果;
- AC向Portal Server送认证结果;
- Portal Server将认证结果填入页面,和门户网站一起推送给客户;
- Portal Server回应确认收到认证结果的报文。
二、用户下线流程
用户下线流程包括用户主动发起下线流程,和用户异常下线流程:AC侦测到用户下线,主动通知Portal server。
2.1、用户下线流程
- 用户发起下线请求到Portal Server。
- Portal Server向AC请求下线。
- AC回应Portal Server下线请求。
- Portal Server推送下线结果页面给用户。
2.2、用户异常下线流程
用户异常下线流程:AC侦测用户下线流程,主动通知Portal server。
- AC侦测到用户下线,向Portal Server请求下线;
- Portal Server回应下线成功;
三、数据报文
3.1、报文格式
协议包采用固定长度头加可变长度的属性字段组成,属性字段采用TLV格式,具体如下图所示。
3.2、报文字段说明
Ver
Ver字段是协议的版本号,长度为 1 字节,目前定义的值为 0x01;
Type
Type字段定义报文的类型,长度为 1 字节,目前其值的如下图所示
Pap/Chap
Pap/Chap字段定义此用户的认证方式,长度为 1 字节,只对Type值为 0x03 的认证请求报文有意义:
- Chap方式认证,值:0x00
- Pap 方式认证,值:0x01
Rsv
Rsv目前为保留字段,长度为 1 字节,在所有报文中值为 0
SerialNo
(1)、SerialNo字段为报文的序列号,长度为 2 字节,由Portal Server随机生成,Portal Server必须尽量保证不同认证流程的SerialNo在一定时间内不得重复,在同一个认证流程中所有报文的SerialNo相同;
(2)、Portal Server发给AC设备的报文
a、由Portal Server发出的Type值为1、3的请求报文其SerialNo都是随机生成数;
b、由Portal Server向AC设备发出的Type值为5的(REQ_LOGOUT)报文其SerialNo值分两中情况:当ErrCode为0 时(请求用户下线报文),SerialNo值为一个随机生成数;当ErrCode为1时,SerialNo值可能和Type值为1或3的报文 (请求Challenge超时, 或请求认证超时) 相同,具体要看是请求Challenge超时还是请求认证超时;
c、由Portal Server向AC设备发出的认证成功确认报文(Type值为7的报文)SerialNo和其发出的相应请求报文的SerrialNo相同;比如对于Type值为7的报文其SerialNo值和Type值为3的请求认证报文相同;
(3)、每一个由AC设备发给Portal Server的响应报文的SerialNo必须和Portal Server发送的相应请求报文的SerialNo一样,否则Portal Server会丢掉从AC设备发来的响应报文; 比如Type值为2的报文其SerialNo值必须和Type值为1的报文相同,Type值为4的报文其SerialNo值必须和Type值为3的报文相同,Type值为6的报文其SerialNo值必须和Type值为5的报文相同。
ReqID
(1)、ReqID字段长度为 2 个字节,由AC设备随机生成,尽量使得在一定时间内ReqID不重复。
(2)、在Chap认证方式中:
a、AC设备在Type为2 (ACK-CHALLENGE) 的请求Challenge响应报文中把该ReqID的值告诉Portal Server;
b、在Type值为3、4、7 ( REQ-AUTH, ACK-AUTH, AFF-ACK-AUTH ) 的报文中ReqID字段的值都和Type值为2的报文中此字段的值相同;
c、在Type值为 5 (REQ-LOGOUT) 的报文中,若报文表示请求Challenge 超时则此字段值为0 ;若报文表示请求认证超时则此字段值和Type值为2 (ACK-CHALLENGE)的报文中此字段的值相同;
(3)、在Pap认证方式中,此字段无意义,其值为0;
(4)、在Type值为 5 (REQ-LOGOUT) 的报文中,若报文表示请求下线时则此字段值为0 ;
(5)、在Type值为1、6 (REQ-CHALLENGE , ACK-LOGOUT) 的报文中,该字段均无意义,值都为 0;
UserIP
UserIP字段为Portal用户的IP地址,长度为 4 字节,其值由Portal Server根据其获得的IP地址填写
在所有的报文中此字段都要有具体的值
UserPort
UserPort字段目前没有用到,长度为 2 字节,在所有报文中其值为0
ErrCode
ErrCode字段和Type字段一起表示一定的意义,长度为 1字节,具体如下:
(1)、对于Type值为1、3、7的报文,ErrCode字段无意义,其值为0;
(2)、当Type值为 2 时:
ErrCode=0,表示AC设备告诉Portal Server请求Challenge成功;
ErrCode=1,表示AC设备告诉Portal Server请求Challenge被拒绝;
ErrCode=2,表示AC设备告诉Portal Server此链接已建立;
ErrCode=3,表示AC设备告诉Portal Server有一个用户正在认证过程中,请稍后再试;
ErrCode=4,则表示AC设备告诉Portal Server此用户请求Challenge失败(发生错误);
(3)、当Type值为 4 时:
ErrCode=0,表示AC设备告诉Portal Server此用户认证成功;
ErrCode=1,表示AC设备告诉Portal Server此用户认证请求被拒绝;
ErrCode=2,表示AC设备告诉Portal Server此链接已建立;
ErrCode=3,表示AC设备告诉Portal Server有一个用户正在认证过程中,请稍后再试;
ErrCode=4 ,表示AC设备告诉Portal Server此用户认证失败(发生错误);
(4)、当Type值为 5 时:
ErrCode=0,表示此报文是Portal Server发给AC设备的请求下线报文;
ErrCode=1,表示此报文是在Portal Server没有收到AC设备发来的对各种请求的响应报文,而定时器时间到(即超时)时由Portal Server发给AC设备的报文;
(5)、当Type值为 6 时:
ErrCode=0,表示AC设备告诉Portal Server此用户下线成功;
ErrCode=1,表示AC设备告诉Portal Server此用户下线被拒绝;
ErrCode=2, 表示AC设备告诉Portal Server此用户下线失败(发生错误);
(6)、对Type为REQ_INFO时,ErrCode无意义,其值为0;
(7)、对Type为NTF_LOGOUT时,ErrCode含义如下:
(8)、对Type为ACK_INFO时,ErrCode含义如下:
AttrNum
AttrNum字段表示其后边可变长度的属性字段属性的个数,长度为 1 字节(表示属性字段最多可有255个属性),其值在所有的报文中都要根据具体情况赋值。
Attr:报文属性字段
Attr字段(属性字段)是一个可变长字段,由多个属性依次链接而成,每个属性的格式为TLV格式。
整体的Attr可能由多个属性TLV组成
报文属性字段说明如下:
(1)、属性类型(AttrType)
(2)、属性长度(AttrLen)
AttrLen字段表示属性的长度,长度为1字节,其值是整个属性三个字段AttrType、AttrLen、AttrValue的长度之和。
(3)、属性值(AttrValue)
AttrValue的值为具体的属性值,比如用户名、口令等,长度有些可变,有些固定(具体见表6.2),但最长不能超过253(255-2)字节。
四、参数
1、此协议规定承载报文的是UDP协议,也即报文为UDP报文,AC设备在固定端口2000(参照《BNAS宽带接入服务器技术规范-YD1148》修订)上等待接收Portal Server发来的各种请求报文和确认报文。
2、 PORTAL强制相关参数
当AC实现强制PORTAL功能时,要求在强制PORTAL URL中包含以下参数:
具体参数格式示例如下:
http://www.portal.com?wlanuserip=10.1.2.34&wlanacname= ACN.CTY.PRO.OPE
http://www.portal.com?wlanusername=IMSI@SIM
允许在”?”后面有其他的参数,但是名称不能以wlan作为起始。
3、 Chap认证的相关说明:
(1)、challenge的生成(AC生成) :
challenge由AC设备在收到请求Challenge报文的时候随机生成,长度为16个字节,跟随Challenge应答报文下发到Portal Server。
(2)、Chap_Password(Chap密码)的生成:
Chap_Password的生成遵循标准的Radious协议中的Chap_Password 生成方法(参见RFC2865)。
密码加密使用MD5算法,MD5函数的输入为ChapID + Password +Challenge (ReqID有AC生成, ChapID是ReqID的低8位)
其中,ChapID取ReqID的低 8 位,Password的长度不够协议规定的最大长度,其后不需要补零。
Chap_Password = MD5 (ChapID+ Password + Challenge )
4、无论采用Chap认证还是Pap认证,都允许用户口令为空;
5、当用户向Portal Server提交的连接请求里用户名为空时,Portal Server在向AC设备发送认证请求时应用一个缺省的用户名代替(比如***);
6、认证流程中各种报文所带属性的个数(建议):
(1)、请求Challenge 报文:0个属性;
(2)、对请求Challenge响应的报文:若请求Challenge成功则为1个属性—Challenge属性,若请求Challenge失败则属性个数为0个;
(3)、请求认证报文:2个属性,分别为用户名、PassWord 或ChapPassWord ;
(4)、对请求认证的响应报文:0个属性;
(5)、请求下线报文或表示超时的报文:0个属性;
(6)、对请求下线的响应报文:0个属性;
(7)、Portal Server对收到从AC设备发来的认证成功报文的确认:0个属性;
(8)、强制下线请求:0个属性;
(9)、查询请求和回应:待定;
7、报文的长度限制是最小16字节,最大1024(1K)字节;
8、从支持多国语言的角度出发,认证结果信息进行统一编码,由Portal Server根据用户语言上下文推送对应信息的页面。