一、功能需求
在项目中,有可能碰到运营商有特殊需求,需要在上传给运营商的radius报文中上传部分特殊属性,这个时候就要用到RADIUS上传属性定制功能。
二、配置要点
1、可以将属性上传到认证请求报文,记账开始报文,记账更新报文中。
2、可以将源报文的属性转换到目标报文属性中。
3、可以直接使用脚本进行二次开发,转发想要的数据。
4、需要获取要上传的相应运营商radius厂商ID和属性号,如项目中碰到有该特殊需求,请联系产品工程师协助处理。
三、配置步骤
1、运营商->RADIUS上传属性定制页面,点击“添加属性定制规则”
2、进入后,根据需求添加相应的规则,如下几个例子:
a、认证报文上传运营商SAM IP
b、在账号后带上所属的域。
作用:运营商为限制账号只能在特定的区域使用,有可能会在账号后加上域名“@xxxxx”。
实现机制:由于SAM中的“@”功能是用来选择服务的,因此如果有这样的需求,在做账号绑定的时候还是只绑定账号部分,后面的域名需要使用上传属性定制功能实现,原理为用户使用账号拨号后,SAM会自动加上域名后送给运营商radius认证。增加域名的定制需要在认证请求和记账请求都要进行配置,如下表示在账号后增加各自运营商的域名。
认证请求报文脚本:
var domain=null; var opn=user.operatorsName; if(opn!=null&&opn.contains('移动')){domain='yd'}; if(opn!=null&&opn.contains('联通')){domain='mhsdxh'}; if(opn!=null&&opn.contains('电信')){domain='dx'}; if(domain!=null&&!domain.equals('')){user.operatorsUserId+'@'+domain}else{user.operatorsUserId}
说明:该脚本为运营商账号如果有带域名时,认证时为不同的运营商添加域名,红色和黄色底色内容可以修改。具体为红色部分是与运营商配置中的运营商名称一致(只要运营商配置中有这两个关键字即可,该字段可以修改),黄色部分为需要添加的域名,如果某个运营商不需要添加域名,则黄色部分删除即可,比如if(opn!=null&&opn.contains('移动')){domain=''};
记账请求报文脚本:
var domain=null; var opn=onlineUser.operatorsName; if(opn!=null&&opn.contains('移动')){domain='yd'}; if(opn!=null&&opn.contains('联通')){domain='mhsdxh'}; if(opn!=null&&opn.contains('电信')){domain='dx'}; if(domain!=null&&!domain.equals('')){onlineUser.operatorsUserId+'@'+domain}else{onlineUser.operatorsUserId}
说明:该脚本为运营商账号如果有带域名时,记账时为不同的运营商添加域名,红色和黄色底色内容可以修改。具体为红色部分是与运营商配置中的运营商名称一致(只要运营商配置中有这两个关键字即可,该字段可以修改),黄色部分为需要添加的域名,如果某个运营商不需要添加域名,则黄色部分删除即可,比如if(opn!=null&&opn.contains('移动')){domain=''};
c、在项目中,一般来说,运营商SAM和运营商radius对接的时候是使用公网IP对接的,如果运营商SAM是放在私网中,通过NAT后再与运营商radius对接,由于radius报文在传给运营商radius的时候带的NAS IP是运营商SAM的地址,如果该IP是私网地址,有可能导致无法认证通过,因此我们需要将传递给运营商radius的NAS IP转成公网IP后上传给运营商,具体步骤如下:
1)首先需要弄清楚运营商radius要求将NAS IP放在哪个属性中,需要提供厂商ID和属性号,比如运营商radius将运营商SAM加为华为设备,第4号属性是NAS IP,那么厂商ID就是华为的ID,属性号是4。
2)由于项目中可能涉及到多个运营商,定制时需要根据运营商名称来区分运营商,因此要求校园网SAM上添加运营商时,运营商名称中必须包含“移动”、“电信”、“联通”字样。比如和联通对接时,必须使用“中国联通”、“联通”、“上海联通”等包含“联通”这两个字的短语作为运营商名称,简单点说就是必须要有这些关键字。
3)上传属性配置:需要在上传属性中对认证请求报文和记账
认证的脚本
var nasip=null; var opn=user.operatorsName; if(opn!=null&&opn.contains('移动')){nasip='1.1.1.1'}; if(opn!=null&&opn.contains('联通')){nasip='2.2.2.2'}; if(opn!=null&&opn.contains('电信')){nasip='3.3.3.3'}; if(nasip!=null&&nasip!=''){Packages.java.net.InetAddress.getByName(nasip).getAddress()}else{null}
记账的脚本
var nasip=null; var opn=onlineUser.operatorsName; if(opn!=null&&opn.contains('移动')){nasip='1.1.1.1'}; if(opn!=null&&opn.contains('联通')){nasip='2.2.2.2'}; if(opn!=null&&opn.contains('电信')){nasip='3.3.3.3'}; if(nasip!=null&&nasip!=''){Packages.java.net.InetAddress.getByName(nasip).getAddress()}else{null}
红色字段需要与运营商对接配置中的运营商名字一致(只要运营商名称有该关键字即可),黄色部分用于填写不同运营商SAM的公网IP,如果不需要,则将IP删除即可,比如 if(opn!=null&&opn.contains('移动')){nasip=''}; 表示移动不需要填写运营商SAM公网IP。
认证请求报文:
记账请求报文:
四、配置验证
无