目录
Portal组网架构
Portal协议报文格式
用户触发Portal认证的方式
Portal认证的认证方式
注意事项
802.1x认证点多,配置量大,因此提出了portal认证
Portal认证也称为Web认证,通过网站的形式进行身份认证,免除客户端(只需要网络浏览器的支持,也可以使用Portal客户端软件进行认证),一般将Portal认证网站称为门户网站
Portal组网架构
认证客户端
一般为运行HTTP/HTTPS协议的浏览器,也可以是运行Portal客户端软件的主机
接入设备NAS
一般为交换机或路由器,主要有三个作用
在认证之前,将用户的所有HTTP请求都重定向到Portal服务器
在认证过程中,与Portal服务器、认证/计费服务器等进行交互,完成身份认证/计费的功能
在认证通过后,允许用户访问被管理员授权的互联网资源
Portal服务器
接收Portal客户端认证请求,提供基于Web认证的界面
与接入设备交互认证客户端的认证信息
认证/计费服务器
与接入设备进行交互,完成对用户的认证和计费
通常为Radius服务器
Portal协议报文格式
Portal端口号为UDP 2000
Version Portal协议版本号
默认为0x02
Poratl协议常用报文Type
REQ_CHALLENGE Portal服务器向接入设备发送的挑战请求报文 0x01(也可以是终端发给Portal服务器)
ACK_CHALLENGE 接入设备对Portal服务器的挑战请求的响应报文 0x02(也可以是Portal服务器发给终端)
REQ_AUTH Portal服务器向接入设备发送的认证请求报文 0x03(也可以是终端发给Portal服务器)
ACK_AUTH 接入设备对Portal服务器的认证请求报文的响应 0x04(也可以是Portal服务器发给终端)
AFF_ACK_AUTH Portal服务器向接入设备发送认证成功的响应报文 0x07(也可以是终端发给Portal服务器)
REQ_LOGOUT Portal服务器向接入设备发送的下线请求报文 0x05
ACK_LOGOUT 接入设备对Portal服务器下线请求的响应报文 0x06
NTF_LOGOUT 接入设备向Portal服务器发送用户被强制下线通知的报文 0x08
ACK_NTF_LOGPUT Portal服务器通知接入设备用户强制下线成功 0x0e
注意事项
REQ_CHALLENGE和ACK_CHALLENGE只有在使用CHAP协议时才会使用到
AuthType 认证方式
目前只支持CHAP和PAP
CHAP:0x00 三次握手,密文方式传输用户名
PAP: 0x01 两次握手,明文方式传输用户名
SeriaINo与RequestID
SeriaINo报文的序列号,由Portal服务器随机生成;Portal服务器必须保证再同一个认证流程中的所有报文序列号相同(不同认证流程下的报文序列号在一定时间不得重复)
RequestID报文ID,由接入设备生成,RequestID不会重复
UserIP
Portal用户的IP地址
UserPort
保留字段,为0
ErrCode
错误码,根据不同的Type值,错误码有不同的含义
Authenticator
验证字段,由MD5算法对各个字段计算后得出来的数据
Attribute
可变长字段,为TLV格式
关于Radius报文
用户触发Portal认证的方式
通过HTTP/HTTPS进行接入,主要在客户端和Portal服务器之间进行交互
用户触发Portal认证的两种方式
用户开机获取IP地址后,通过登录Portal认证网站进行认证,认证通过后即可访问Internet
主动认证
用户需要知道Portal服务器的IP地址,主动登录到Portal门户网站进行Portal认证
重定向认证
用户输入的访问地址不是Portal服务器的IP地址,然后被接入设备强制重定向到Portal服务器
根据客户端与接入设备之间的网络分为不同的认证方式
二层直连Portal认证:客户端与接入设备之间为二层网络
接入设备在连接用户的二层端口上开启Portal认证,只允许源MAC通过认证的用户才可以访问外部网络
目前该认证方式仅支持本地Portal认证(即接入设备作为本地的Portal服务器向用户提供Web认证服务;也就是内置Portal认证)
三层Portal认证:客户端与接入设备之间为三层网络
在连接用户的三层端口上开启Portal认证,其中又细分为三种不同的认证方式(支持本地Portal认证和第三方服务器认证)
直接认证
用户在认证前通过手工配置或DHCP直接获取一个IP地址,只能访问Portal服务器以及设定的免费访问地址;认证通过后才可以访问网络资源
二次地址分配认证
用户在认证前通过DHCP获取到一个私网地址,只能访问Portal服务器以及设定的免费访问地址;认证通过后会重新申请一个公网地址来访问网络资源,认证失败后不会获取IP地址
可跨三层认证
和直接认证类似,只不过此认证方式允许认证用户和接入设备之间跨三层设备转发
用户触发Portal认证的流程
Portal认证的认证方式
对于Porta认证我们由一代Portal认证和二代Portal认证,它们之间的主要区别如下(以下我们介绍的都是二代Web认证流程)
一代Web认证 –Poratl服务器和Radius服务器进行认证报文交互
终端把用户名和密码提交上来之后,通过Portal界面提交给Portal服务器
Porta服务器直接把用户名和密码发给Radius服务器
Radius服务器校验之后告诉给Portal服务器,Portal向终端返回认证成功界面;
Portal服务器再把认证的结果告诉接入设备,接入把相应的上网通道给打开
二代Web认证—接入设备代替Portal服务器和Radius服务器进行认证报文交互(Portal感知不到Radius服务器)
终端输入用户名和密码之后,通过Portal界面提交到Portal服务器
Portal服务器把用户名和密码提交给接入设备,接入设备去发送Radius报文和Radius服务器去交互进行认证
认证成功之后,接入设备放通用户上网权限,并告诉Portal服务器,Portal服务器通过下发认证成功的界面给终端
终端触发Portal认证时的认证流程
通过Web认证(免客户端) 基于HTTP/HTTPS进行认证
客户端直接将用户信息通过HTTP请求传递给接入设备,支持GET和POST两种请求
此时用户提交的用户名密码通过HTTP/HTTPS报文传输
POST:请求数据放置在HTTP请求消息的正文中,不作为URL的一部分
GET: 请求的数据会加在URL之后,以“?“分隔,对所有人可见(以下就是此方式)
通过Portal客户端软件进行认证(基于Portal协议进行Portal认证)
Portal服务器直接使用Portal协议报文与接入设备进行交互
采用客户端软件/服务器的架构,基于UDP运行,支持PAP/CHAP认证
此时用户提交的用户名密码通过Portal报文传输,Portal报文采用TLV格式携带用户名、密码、用户MAC等属性信息
- 用户发送认证请求,将用户名和密码发给Portal设备,通过Req_auth报文的TLV携带
- Portal服务器发送Req_challenge给接入设备;Req_challenge表示告诉接入设备开始CHAP的认证,开始认证请求
- 接入设备收到后,产生随机数发送给Portal服务器,发送Ack_challenge响应认证请求
- Portal服务器收到接入设备发来的随机数后,使用密码和随机数做hash得到密文发给接入用户,进行请求认证,发送Req_auth
- 接入设备将收到的密文以及自己产生的随机数发给Radius服务器,进行认证请求,发送radius报文Access-request进行认证请求
- Radius服务器根据此随机数结合该用户的密码做hash的到密文,然后比较hash的结果是否一致;结果一致发送readius报文Access-accept告诉认证结果成功
- 此时接入设备进行计费请求(Accounting-Request)
- Radius服务器回应计费响应(Accounting-Response)
- 接入设备收到之后告诉Portal服务器用户通过认证并放通用户上网通道;发送ack_auth报文
- Portal服务器收到认证成功报文后,并通知用户认证成功发送ack_auth报文
- Portal服务器并响应接入设备的认证成功报文,发送Aff_ack_auth报文
通过二次地址分配认证接入时的认证流程(Portal客户端方式)
注意事项
在现网中,可能会存在运营商认证设备,此种情况下真正的认证设备是运行商认证设备,而不是本地部署的radius服务器
大致的认证流程如下:
客户端将认证请求送达到Portal服务器,Portal服务器将其送到接入设备,接入设备将请求发送到本地radius服务器,本地radius服务器收到后,转发给运营商认证设备去做校验
运营商校验成功,将结果返回给本地radius服务器,本地radius服务器再将结果转发给接入设备,接入设备转发给Portal服务器,Portal服务器转发给终端,返回认证成功
之后的计费是由本地radius服务器进行计费的