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根据用户语言上下文推送对应信息的页面。

wifi认证Portal开发系列(三):portal协议的更多相关文章
- S5PV210开发系列三_简易Bootloader的实现
S5PV210开发系列三 简易Bootloader的实现 象棋小子 1048272975 Bootloader是嵌入式系统上电后第一段运行的代码.对于功能简单的处理器,可能并没有Bo ...
- BizTalk开发系列(三十三)BizTalk之Excel终极解决方案
Excel作为优秀的客户端数据处理程序得到了广泛的应用. 由于其简单又强大的功能在很多公司或个人的数据处理中占用非常重要的位置. 而BizTalk作为微软的SOA主打产品虽然免费提供了很多Adapte ...
- Windows下USB磁盘开发系列三:枚举系统中U盘、并获取其设备信息
前面我们介绍了枚举系统中的U盘盘符(见<Windows下USB磁盘开发系列一:枚举系统中U盘的盘符>).以及获取USB设备的信息(见<Windows下USB磁盘开发系列二:枚举系统中 ...
- 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计
这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...
- leaflet-webpack 入门开发系列三地图分屏对比(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...
- wifi认证Portal开发系列(四):portal协议的java封装
一.报文封装类 AbstractPortalMsg.java Portal协议数据报文封装类 package org.yoki.edu.common.protocol.portal.msg; imp ...
- wifi认证Portal开发系列(二):FreeRadius的安装和测试、关联Mysql
注:本次安装是基于FreeRadius 3版本进行安装配置的,在配置Mysql的过程中,与2版本有些不同.操作系统是CentOS 7 一.准备工作 工具的安装 #安装rz.sz命令用于文件上传 yum ...
- wifi认证Portal开发系列(一):Radius与FreeRadius简介
RADIUS 维基百科上的介绍: Remote Authentication Dial-In User Service (RADIUS) is a networking protocol that p ...
- BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]
做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...
随机推荐
- 【HDOJ5533】Dancing Stars on Me(计算几何)
题意:给定二维平面上的n个整点,问它们是否都在正n边形的定点上 n<=100,abs(x[i]),abs(y[i])<=1e4 思路:队友做的,抱大腿 可以发现只有n=4时顶点有可能都是整 ...
- poi导出excel文件(桃)
1.基本可以通用的工具类 package com.idcsol.apps.common.excel; import java.io.IOException; import java.io.Output ...
- 19年的桌面KDE的风雨和陪伴,没有什么能够割舍
概述 KDE是史上功能最强大的桌面环境之一:开源且可自由使用.19年前,1996年10月14日,德国程序员 Matthias Ettrich 开始了这个美观的桌面环境的开发.KDE 提供了用户界面以及 ...
- mariadb中执行数据库脚本的方法
为了项目需求,写如下sql数据库脚本: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for ...
- HDU 6225.Little Boxes-大数加法 (2017ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学))
整理代码... Little Boxes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/O ...
- JMeter性能测试常用之事务控制器实例
通常进行性能测试时,我们一般仅考虑主要的数据返回,不考虑页面渲染所需要的数据(例如:css.js.图片等).但当我们需要衡量打开一个页面(页面渲染完成)的性能时,我们就需要考虑完成页面渲染所需要的图片 ...
- BZOJ 4543 2016北京集训测试赛(二)Problem B: thr
Solution 这题的解法很妙啊... 考虑这三个点可能的形态: 令它们的重心为距离到这三个点都相同的节点, 则其中两个点分别在重心的两棵子树中, 且到重心的距离相等; 第三个点可能在重心的一棵不同 ...
- Jenkins内存溢出的处理方法
参考:http://openwares.net/java/jenkens_deploy_to_tomcat_error_of_outofmemoryerror.html上的说明,有如下解释: -Xms ...
- 修改linux iptable规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(允许80端口通过防火墙)-A INPUT -m state --sta ...
- HPU 3639--Hawk-and-Chicken【SCC缩点反向建图 && 求传递的最大值】
Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...