radius密码,低代码平台将如何改变软件开发?
radius密码,低代码平台将如何改变软件开发?
随着低代码概念的火热,相关的技术及产品也是层出不穷,不管是老牌行业软件厂商还是开放平台厂商,不论是互联网行业企业SAAS软件新动向还是新兴的低代码创新产品服务,都在第一时间打出了低代码这张牌。各个平台虽然各有优势,但大多又是自成体系,真正在企业方面进行选择时却一时难以抉择。对于低代码平台的功能评价,以及各平台组件间的互联互通则成为了市场上迫切需求。
在刚刚过去的2022年,在平台互联互通的方面,阿里在第二季度推出开源引擎 “LowCodeEngin”,国家队信通院也应市场需求在第四季度推出了《低代码开发平台通用技术要求》,针对低代码相关概念以及功能点新型了进一步的规范和梳理。在全面开放的大背景下,CodeBee团队,推出了基于开源LGPL协议 低代码引擎(LowCodeEngine)。二,产品组成低代码引擎,由界面设计器、OneCode通码框架以及,DSM领域建模工具 三部分支撑体系相互支撑的部分来组成,通过开放标准的组件协议完成相互继承支持。(1) 视图设计器引擎设计器,采用的是拖拽引擎+插件的构造模型,用户可以通过开放的低代码协议编写插件。支持JS和JAVA两种扩展语言。样式构建提供了标准CSS3编辑器,支持事件动作以及函数动态扩展。支持自定义函数库扩展,支持阿里字体图片等资源库。(2)OneCode通码编辑器:OneCode,是一款为低代码语言定制的统一语法体系,采用Java语言作为原生语言,运行在JVM环境中,用户可以通过Java语言与低代码应用进行交互,也可以通过Java语言完成引擎插件,调用代码引擎完成编译部署应用。(3)DSMEngine领域建模:DSMEngine 是独立于设计器的OneCode建模工具,平台采用领域建模模型,支持仓储管理、聚合应用,以及CodeFactory输出为OneCode代码编译输出。DSM模型支持三种建模模式:(1)CodeFrist 代码优先模式通过Java语言 OneCode 模式原生撰写。(2)ViewFrist 视图优先通过视图引擎拖拽完成前期的交互模型,反向完成DSM模型。(3)ModuleFrist 模型优先通过数据库,微服务接口等模式,构建基础模型。DSM逆向转换通过不同方式完成的DSM模型,可以通过OneCode 在视图、Code 、以及Module 三种方式之间自由切换,利用相关工具完成仿真调试以及部署运行。DSM第三方语言转换DSM出码模块采用了独立的模板架构,除了可以以OneCode形式存在,还可以支持独立的出码模块定制独立的第三方语言模型输出。三,设计器引擎介绍(1)功能概览(2)设计器布局设计器引擎是低代码引擎前端的SDK,面向开发人员,他本身不是一套可以适应所有人的低代码平台,而是技术开发人员可以通过扩展插件,周边生态,完成自身业务的定制,实现协同办公,CRM客户管理、物联网平台等通过低代码能力赋能业务系统(3)物料库"物料":低代码引擎的核心目的之一是建设跨行业的低代码框架,而每个行业由于其应用的领域不同,使用的人员以及方法方式不同,在一些底层组件方面会有会有加大差距。比如:政府业务中会大量使用的非规则表单元素,企业应用中各个行业自有的图标体系,物联网行业大量的设备图标图片以及实时联网图。(4)组件库组件定义:可以用于低代码平台的组件,包含了搭建体验增强配置,可以在设计器中 进行拖拽、配置等操作。有两种分类方式:按照场景可以分为基础组件、业务组件、图 表组件、布局组件和复合组件等。通常用户可以自主完成相关设定,并根据业务特点在视图引擎中进行自行扩展(后续章节中会演示实际注册示例)组件通常是一组完成特定功能的可交互组件,根据不同的引擎模式,在引擎中完成加载渲染配置。配置示例Code转换组件调试导入(5)支撑管理公共资源导入(6)样式体系DOM树透视样式盒DOM树透视添加图片注释,不超过 140 字(可选)配图示例代码{ "alias":"BuildTreeTreeView", "key":"xui.UI.TreeView", "host":this, "properties":{ "name":"BuildTreeTreeGrid", "items":[ { "borderType":"none", "caption":"JAVA树", "dynDestory":false, "hidden":false, "id":"getBuildTree", "imageClass":"bpmfont bpmgongzuoliuxitongpeizhi", "tagVar":{ } } ], "iniFold":false, "dynDestory":true }, "CS":{ "KEY":{ "color":"#000000", "font-weight":"lighter", "border-radius":"0px 2px 0px 0px" }, "BAR":{ "font-family":"tahoma,geneva,sans-serif" } } }
动态样式盒添加图片注释,不超过 140 字(可选)代码配置示例{ "alias":"xui_ui_cssbox1", "key":"xui.UI.CSSBox", "host":this, "properties":{ "className":"xui-css-ame", "normalStatus":{ "color":"#eeeeee", "border-radius":"6px", "box-shadow":"inset 0px 1px 0px #87C1DD", "text-shadow":"0 1px 0 #297192", "$gradient":{ "stops":[ { "pos":"0%", "clr":"#4BA3CC" }, { "pos":"70%", "clr":"#3289B2" } ], "type":"linear", "orient":"T" }, "cursor":"pointer", "border-top":"solid #3899C6 1px", "border-right":"solid #3899C6 1px", "border-bottom":"solid #3899C6 1px", "border-left":"solid #3899C6 1px" }, "hoverStatus":{ "border-radius":"0px 3px 0px 0px" } } }
(7)事件框架添加图片注释,不超过 140 字(可选)配置代码示例:{ "alias":"BuildTreeTreeView", "key":"xui.UI.TreeView", "host":this, "properties":{ "name":"BuildTreeTreeGrid", "items":[ { "borderType":"none", "caption":"JAVA树", "dynDestory":false, "hidden":false, "id":"getBuildTree", "imageClass":"bpmfont bpmgongzuoliuxitongpeizhi", "tagVar":{ } } ], "iniFold":false, "dynDestory":true }, "events":{ //获取数据 "onGetContent":{ "actions":[ { "args":[ "{page.ReloadChild.setQueryData()}", null, null, "{args[1].tagVar}", "" ], "desc":"设置扩展参数", "method":"setQueryData", "redirection":"other:callback:call", "target":"ReloadChild", "type":"control" } ] }, //数据项选择 "onItemSelected":{ "actions":[ { "args":[ "{args[1].id}" ], "conditions":[ { "symbol":"non-empty", "right":"", "conditionId":"_nonempty_{args[1].className}", "left":"{args[1].className}" } ], "desc":"删除存在页", "method":"removeItems", "target":"BuildTreeTab", "type":"control" } ] } } }
(8)动作调用功能概览添加图片注释,不超过 140 字(可选)添加图片注释,不超过 140 字(可选)配置实例代码:{ "args":[ "{page.ReloadChild.setQueryData()}", null, null, "{args[1].tagVar}", "" ], "desc":"设置扩展参数", "method":"setQueryData", "redirection":"other:callback:call", "target":"ReloadChild", "type":"control" }, { "args":[ "{page.ReloadChild.invoke()}", "temp", null, "{args[2]}" ], "desc":"子节点装载", "method":"invoke", "redirection":"other:callback:call", "return":false, "target":"ReloadChild", "type":"control" } ] }
(9)插件体系插件是嵌入到设计器的内置管理功能,不同于业务组件,插件更多的是系统极的扩展功能。在实际应用中也比较常见,如系统运行期我们要根据用户不同显示不同内容数据,这就需要权限插件来完成,而业务用户在使用过程也会涉及到大量的业务和数据的流转功能而这些功能则需要动态的来管理页面的属性,甚至动态生成注入页面。这就需要流程插件来辅助完成。 在实际开发过程中特别是真实项目的工程开发时,我们往往要针对工程方面的进行很多的宏操作比如批量的修改特定组件样式,按特定条件检索复制组件特性,自动添加动作等等。这些都需要类似的宏插件来完成,OneCode 在整合后端运行以及服务部署方面也是按插件体系来规范的。分别针对,DSM建模提供了DSM插件,发布管理及运行提供了OPS插件, API整合方面提供了代理服务器插件,系统插件部分采用全开源方式共有需要的用户自行修改方便用户后期可以参照插件体系来修改自身的插件体系。添加图片注释,不超过 140 字(可选)添加图片注释,不超过 140 字(可选)四,OneCode中后台OneCode 本身基于JAVA语言体系,是在Java Spring 注解基础上的一套扩展子集,可以在普通额Java程序中通过添加注解,来实现前后台与低代码引擎的交互处理。(1)渲染原理(2)示例展示添加图片注释,不超过 140 字(可选)(3)完整模块OneCode添加图片注释,不超过 140 字(可选)添加图片注释,不超过 140 字(可选)@Controller @RequestMapping("/admin/org/person/") @MethodChinaName(cname = "人员管理", imageClass = "spafont spa-icon-login") @Aggregation(sourceClass = PersonService.class) public class PersonAPI { @RequestMapping(method = RequestMethod.POST, value = "Persons") @GridViewAnnotation() @ModuleAnnotation( caption = "人员列表") @APIEventAnnotation(autoRun = true, bindMenu = {CustomMenuItem.reload}) @ResponseBody public ListResultModel<List<PersonGridView>> getPersons(String orgId) { ListResultModel<List<PersonGridView>> resultModel = new ListResultModel<List<PersonGridView>>(); List<Person> personList = new ArrayList<>(); try { personList = getService().getPersons(orgId); resultModel = PageUtil.getDefaultPageList(personList, PersonGridView.class); } catch (Exception e) { e.printStackTrace(); } return resultModel; } @MethodChinaName(cname = "人员信息") @RequestMapping(method = RequestMethod.POST, value = "PersonInfo") @NavGroupViewAnnotation() @APIEventAnnotation(callback = {CustomCallBack.ReloadParent, CustomCallBack.Close}, bindMenu = {CustomMenuItem.editor}) @DialogAnnotation @ModuleAnnotation(caption = "编辑人员信息", width = "800", height = "550") @ResponseBody public ResultModel<PersonNav> getPersonInfo(String personId) { ResultModel<PersonNav> resultModel = new ResultModel<PersonNav>(); return resultModel; } @MethodChinaName(cname = "添加人员") @RequestMapping(method = RequestMethod.POST, value = "AddPersonView") @FormViewAnnotation @APIEventAnnotation(bindMenu = {CustomMenuItem.add}, autoRun = true) @Disabled @ModuleAnnotation( caption = "添加人员信息", width = "370", height = "260") @ResponseBody public ResultModel<AddPerson> AddPerson(String orgId) { ResultModel<AddPerson> resultModel = new ResultModel<AddPerson>(); CtPerson person = new CtPerson(); person.setOrgId(orgId); resultModel.setData(new AddPerson(person)); return resultModel; } @MethodChinaName(cname = "保存成员信息") @RequestMapping(value = {"savePerson"}, method = {RequestMethod.GET, RequestMethod.POST}) @APIEventAnnotation(callback = {CustomCallBack.ReloadParent, CustomCallBack.Close}, bindMenu = CustomMenuItem.save) public @ResponseBody ResultModel<Boolean> savePerson(@RequestBody CtPerson person) { ResultModel<Boolean> userStatusInfo = new ResultModel<Boolean>(); getService().savePerson(person); return userStatusInfo; } @MethodChinaName(cname = "删除人员") @RequestMapping(value = {"delPerson"}, method = {RequestMethod.GET, RequestMethod.POST}) @APIEventAnnotation(callback = {CustomCallBack.Reload, CustomCallBack.ReloadParent}, bindMenu = CustomMenuItem.delete) public @ResponseBody ResultModel<Boolean> delPerson(String iD) { ResultModel<Boolean> userStatusInfo = new ResultModel<Boolean>(); getService().delPerson(iD); return userStatusInfo; } PersonService getService() { return EsbUtil.parExpression(PersonService.class); } } @PageBar // @GridAnnotation(event = CustomGridEvent.editor, customService = PersonService.class, customMenu = {GridMenu.Add, GridMenu.Delete, GridMenu.Reload}) public class PersonGridView { @CustomAnnotation(pid = true, hidden = true) String orgId; @CustomAnnotation(pid = true, hidden = true) String roleId; @CustomAnnotation(uid = true, hidden = true) String iD; @CustomAnnotation(caption = "用户名称", required = true) String name; @CustomAnnotation(caption = "账户信息", required = true) String account; @CustomAnnotation(caption = "邮箱") String email; @InputAnnotation(inputType = InputType.password) @CustomAnnotation(caption = "密码", required = true) String password; @CustomAnnotation(caption = "手机") String mobile; @CustomAnnotation(caption = "部门名称") String orgName; public PersonGridView(Person person) { this.iD = person.getID(); this.orgId = person.getOrgId(); this.name = person.getName(); this.account = person.getAccount(); this.password = person.getPassword(); this.mobile = person.getMobile(); this.email = person.getEmail(); Org org = null; try { org = OrgManagerFactory.getOrgManager().getOrgByID(person.getOrgId()); this.orgName = org.getName(); } catch (OrgNotFoundException e) { e.printStackTrace(); } } } @BottomBarMenu @FormAnnotation(bottombarMenu = {CustomFormMenu.Save, CustomFormMenu.Close}, customService = PersonService.class, col = 1) public class AddPerson { @CustomAnnotation(uid = true, hidden = true) String iD; @CustomAnnotation(caption = "用户名称", required = true) String name; @CustomAnnotation(pid = true, hidden = true) String orgId; @CustomAnnotation(pid = true, hidden = true) String roleId; @CustomAnnotation(caption = "账户信息", required = true) String account; @CustomAnnotation(caption = "邮箱") String email; @InputAnnotation(inputType= InputType.password) @CustomAnnotation(caption = "密码", required = true) String password; @CustomAnnotation(caption = "手机") String mobile; public AddPerson(Person person) { this.iD = person.getID(); this.orgId = person.getOrgId(); this.name = person.getName(); this.account = person.getAccount(); this.password = person.getPassword(); this.mobile = person.getMobile(); this.email = person.getEmail(); } }
(五)DSM建模工具DSM建模,百度百科是这样定义的:特定域建模(Domain-specific modeling,DSM),是一种设计和开发系统(如电脑软件)的软件工程方法学。它系统使用图形化特定域语言(DSL),表现系统的各个方面。DSM的语言倾向于支持比通用建模语言更高级别的抽象,因此需要较少的努力和更少的底层细节来描述特定系统。低代码技术应用可以通过提供更强的工具,提升程序员的代码效率。但其本质上也是一种特定场景下的软件描述方法,这个层面上低码技术和DSM思想是有其相通相同之处的,产品在设计之初就将DSM建模语言的构建以及工具支撑作为了底层支撑设计,将应用中积累的建模应用采用DSM的思想进行重构整合在底层打通。我们将现有的资源类的工具,统一到仓库应用中,包括统一的物料库导入,统一的数据源(数据库,外部存储)管理。并通代码工厂的辅助构建统一到Contenxt(OneCode)的当前环境技术模型中。在各个特定的业务模型中,完成独立的聚合实体整合,以及相应的服务管理,并为相关的方法模型透视管理服务。在OneCode 的基础之上,摆脱传统的 代码模板与生成机制。实现代码向模型的逆向能力。将DSM设计能贯穿整个项目开发实施管理过程,打造结余真实的代码之上的建模语言。(1)仓储建模(2)聚合应用(3)视图工厂(4)支撑域添加图片注释,不超过 140 字(可选)(5)流程建模添加图片注释,不超过 140 字(可选)六,应用集成(1)内核最小集合集成(JS离线应用)设计器内核完全采用JS脚本完成,是独立的前端框架。内核版本包括:RAD 页面设计编辑器,xui运行运行脚本两部分。添加图片注释,不超过 140 字(可选)最小集合仅包含,页面设计及器以及插件框架。设计界面集成:怎么玩开源包后,运行debug.html 即可打开编辑器。添加图片注释,不超过 140 字(可选)集成到自由应用时只需要,引入两个关键的js lib包即可集成到自有的应用。<script type="text/javascript" src="/RAD/xui.js"></script> <script type="text/javascript" src="/RAD/index.js"></script> <script type="text/javascript"> var lang = (function () { var dft = 'zh-cn', map = { 'en-us': 'en', 'zh-cn': 'cn' }, n = navigator, l = (n.language || n.browserLanguage || '').toLowerCase(); return map[l] || map[dft]; })(); xui.include("xui.Locale." + lang + '.doc', "/RAD/Locale/" + lang + ".js", function () { xui.Module.load('RAD', function () { SPA = this; }, lang); });
运行支撑环境集成:打开:设计完成的文件再应用环境中引入如下代码即可<script type="text/javascript" src="/xui/js/xui-all.js"></script> <script type="text/javascript" src="./xuiconf.js"></script> <script type="text/javascript" src="/xui/Locale/cn.js"></script>
(2)团队协作版团队协作版是独立的服务器部署版,在官网上申请账号后,可以在独立的服务器上运行。启动后通过浏览器访问 http://demoserver:83 用管理员 sysadmin 登录:首次登录 会进入默认的工程配置界面配置工程关联API设定团队管理员设置密码选WPAWPA2还是WEP啊?
展开全部
无线路由器主要提供了三种无线安全类型:WPA-PSK/WPA2-PSK、WPA/WPA2 以及WEP。不同的安全类型下,安全设置项不同。
1. WPA-PSK/WPA2-PSK
WPA-PSK/WPA2-PSK安全类型其实是WPA/WPA2的一种简化版本,它是基于共享密钥的WPA模式,安全性很高,设置也比较简单,适合普通家庭用户和小型企业使用。
认证类型: 该项用来选择系统采用的安全模式,即自动、WPA-PSK、WPA2-PSK。自动:若选择该项,路由器会根据主机请求自动选择WPA-PSK或WPA2-PSK安全模式。
加密算法: 该项用来选择对无线数据进行加密的安全算法,选项有自动、TKIP、AES。默认选项为自动,选择该项后,路由器将根据实际需要自动选择TKIP或AES加密方式。注意11N模式不支持TKIP算法。
PSK密码: 该项是WPA-PSK/WPA2-PSK的初始设置密钥,设置时,要求为8-63个ASCII字符或8-64个十六进制字符。
组密钥更新周期:该项设置广播和组播密钥的定时更新周期,以秒为单位,最小值为30,若该值为0,则表示不进行更新。
2. WPA/WPA2
WPA/WPA2是一种比WEP强大的加密算法,选择这种安全类型,路由器将采用Radius服务器进行身份认证并得到密钥的WPA或WPA2安全模式。由于要架设一台专用的认证服务器,代价比较昂贵且维护也很复杂,所以不推荐普通用户使用此安全类型。
3. WEP
WEP是Wired Equivalent Privacy的缩写,它是一种基本的加密方法,其安全性不如另外两种安全类型高。选择WEP安全类型,路由器将使用802.11基本的WEP安全模式。这里需要注意的是因为802.11N不支持此加密方式,如果您选择此加密方式,路由器可能会工作在较低的传输速率上。
4.其他说明:三种无线加密方式对无线网络传输速率的影响也不尽相同。由于IEEE 802.11n标准不支持以WEP加密或TKIP加密算法的高吞吐率,所以如果用户选择了WEP加密方式或WPA-PSK/WPA2-PSK加密方式的TKIP算法,无线传输速率将会自动限制在11g水平(理论值54Mbps,实际测试成绩在20Mbps左右)。也就是说,如果用户使用的是符合IEEE 802.11n标准的无线产品(理论速率150M或300M),那么无线加密方式只能选择WPA-PSK/WPA2-PSK的AES算法加密,否则无线传输速率将会明显降低。而如果用户使用的是符合IEEE 802.11g标准的无线产品,那么三种加密方式都可以很好的兼容,不过仍然不建议大家选择WEP这种较老且已经被破解的加密方式,最好可以升级一下无线路由。
apn怎么样?
APN的英文全称是Access Point Name,中文全称叫接入点,是在通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络。
1、手机默认上网配置一般用于WAP浏览,所以APN接入点普遍默认设置成CMWAP,名称一般叫“移动梦网”(中国移动的品牌),CMNET的接入配置名称一般叫“GPRS连接互联网”之类的。
2、专线APN传输方式:根据企业对网络安全的特殊要求,采用了多种安全措施,通过一条2M专线接入移动公司GPRS网络,双方互联路由器之间采用私有IP地址进行广域连接,在GGSN与移动公司互联路由器之间采用GRE隧道,为客户分配专用的APN,普通用户不得申请该APN,用于GPRS专网的SIM卡仅开通该专用APN,限制使用其他APN。
3、客户可自建一套RADIUS服务器和DHCP服务器,GGSN向RADIUS服务器提供用户主叫号码,采用主叫号码和用户账号相结合的认证方式。用户通过认证后由DHCP服务器分配企业内部的静态IP地址。
4、业务流程:GPRS专网系统终端上网登录服务器平台的流程,用户发出GPRS登录请求,请求中包括由移动公司为GPRS专网系统专门分配的专网APN,根据请求中的APN,SGSN向DNS服务器发出查询请求,找到与企业服务器平台连接的GGSN,并将用户请求通过GTP隧道封装送给GGSN;
5、GGSN将用户认证信息(包括手机号码、用户账号、密码等)通过专线送至Radius进行认证; Radius认证服务器看到手机号等认证信息,确认是合法用户发来的请求,向DHCP服务器请求分配用户地址。 Radius认证通过后,由Radius向GGSN发送携带用户地址的确认信息,用户得到了IP地址,就可以携带数据包,对GPRS专网系统信息查询和业务处理平台进行访问。
6、APN的技术:从运营商角度看,APN就是一个逻辑名字,APN一般都部署在GGSN设备上或者逻辑连接到GGSN上,用户使用GPRS上网时,都通过GGSN代理出去到外部网络。
7、因此APN、设计、过滤、统计等等,就成为一个对GPRS计费,GPRS资费有重要参考价值的参数之一。
光猫和路由器能频繁开关吗?
先来说下答案,光猫和路由器不要频繁开关,因为这样很容易触发宽带账号吊死机制。
平时如果不上网,可以把光猫和路由器的电源关闭,这样能够节约用电。不过,光猫和路由器频繁开关,会触发运营商RADIUS服务器的账号吊死机制,导致宽带无法上线。
由于家庭宽带多是PPPoE拨号验证,路由器会自动拨号。一旦光猫和路由器被断电,RADIUS服务器端的信息并不会及时刷新,仍然处于连接状态。频繁开关光猫和路由器的电源,运营商的RADIUS服务器会认为有人盗号,系统会自动把账号吊死。
宽带账号被禁用后,用户端状态正常,就是无法正常上网,会弹出账号和密码错误的提示。即便是把密码重置,也是无法上网的。
要想解除宽带账号被吊死的状态,只能找运营商后台解除,流程比较繁琐。而且,一般的宽带维修人员,并不懂得账号吊死这一故障。为此,光猫和路由器不要频繁开关。
安装时是不是需要电信录入盒子的mac地址?
你说的没错,中国电信的IPTV机顶盒的确会录入盒子的MAC地址。我给你解释一下中国电信的IPTV认证的流程,看看能不能解决你的疑惑
IPTV机顶盒在中国电信的认证流程分为两次,一次是对机顶盒的硬件认证,一次是对用户订购的节目进行业务认证,这两次认证都有可能对MAC地址进行校验,我分开来说明一下
电信机顶盒的硬件认证过程IPTV机顶盒第一次认证的目的,主要是对硬件的合法性进行认证,避免非电信认证的机顶盒接入中国电信的专网,认证的整个过程如下图所示,由机顶盒、运营商的SR路由器(分配地址)和AAA(认证)设备配合完成
在我们打开机顶盒上电后,机顶盒一般会通过DHCP去获取IP地址,在获取地址之前,电信网络需要对机顶盒进行认证。机顶盒发出第一个DHCP报文中会携带如下信息:机顶盒的MAC、Option60和Option82
Option60的作用是根据电信的规则加密生成用户名密码,Option82的作用是携带这个机顶盒是在哪个小区哪个设备上线的位置信息,MAC地址就是机顶盒的硬件信息。机顶盒在获取地址时,会携带用户名、密码、位置以及机顶盒的硬件(MAC)信息,用于认证,如下图所示。
电信的SR(业务路由器)设备收到机顶盒的DHCP报文时,会获取这些信息,再重新组装成Radius认证的信息送到AAA服务器认证。电信的AAA上保存有用户订购IPTV业务时存储的机顶盒的信息(这个信息也有可能在机顶盒第一次开机认证时和用户名绑定,后续都以第一次绑定的MAC为准)
如果发现这些信息和电信预存的信息不符合,电信AAA不会允许这个机顶盒上线。也就是当我们使用其他机顶盒时,如果用户名密码、MAC、以及上线的位置信息和电信AAA里保持的不一致,电信就会拒绝机顶盒上线,认为这是非法的
如果和电信预存的信息一致,那么AAA就会允许机顶盒接入电信IPTV专网,并继续通过DHCP获取地址。
电信机顶盒的业务认证过程在硬件机顶盒上线后,紧跟着有第二次认证过程,这次过程是在访问EPG(电子节目单,也就是我们看到的IPTV的首页)时,会有一个认证和鉴权的过程,这个过程如下:
这个过程的主要目的,是为了让合法的用户只能访问自己订购的IPTV节目,所以需要和IPTV业务平台交互。我们都知道IPTV里面有很多业务是出钱才能看的,这次认证就是要获取哪些内容是用户可以观看的
我们看到这次认证中带了3个信息,UserToken、MAC、STBID。UserToken是唯一标识这个用户订购业务的信息,MAC是机顶盒的MAC信息,STBID是机顶盒的识别码,IPTV业务系统通过STBID来识别内网授权的机顶盒,这个信息里面也包括MAC地址的信息,如下图:
认证通过之后,EPG会给我们正确的电子节目单,我们就可以正常的观看IPTV节目
结论由此可见,不管是电信IPTV机顶盒的认证,还是基于业务的第二次认证,都会获取机顶盒的MAC地址。同时电信IPTV的认证,可以保证用户名、密码、位置信息和MAC地址、用户订购的节目完全对应
所以,如果想使用IPTV业务,必须要用中国电信自己授权的机顶盒,如果随便选用任意的机顶盒,怕是无法享受正常的IPTV服务的