快速实现商业Wi-Fi接入认证
引导式阅读
Java
快速实现商业Wi-Fi接入认证
作者
HDC.Cloud
上架时间
2020-01-14 15:34:46

快速实现商业Wi-Fi接入认证

您在体验过程中有任何疑问,都可以在此留言反馈>>问题反馈

1. 介绍

什么是商业Wi-Fi接入认证?

您在商场经常会使用公共Wi-Fi,弹出一个登录界面,这个实现复杂吗? 其实很简单 。

商业Wi-Fi认证主要应用于商场酒店、机场地铁、企业来访等,通过Wi-Fi访问互联网的场景。网络提供方需要对接入网络的访客进行用户认证,同时提供宣传,推荐及营销等功能,访客通过认证后才被允许接入Wi-Fi使用网络。

开发者为接入访客提供认证Portal页面,并调用华为iMaster NCE-Campus API授权接口,从而实现认证、计费、用户分析、市场营销等服务。

What

什么是华为iMaster NCE-Campus

在了解什么是iMaster NCE-Campus之前,先来看看与其紧密相连的另一个概念——华为智简园区网络(CloudCampus)解决方案,应用最前沿的有线和无线技术,加持大数据、AI和云技术,以业务为中心,构建万物互联、业务无忧和可平滑演进的园区网络,使能行业数字化转型。

iMaster NCE-Campus是智简园区网络(CloudCampus)解决方案的重要组成,是华为推出的新一代园区与分支网络控制器,支持网络部署自动化,策略自动化,SD-WAN等创新方案,帮助企业降低OPEX运维成本,加速业务上云与数字化转型,让网络管理更便捷,让网络运维更智能。

我们可以这样理解:CloudCampus是一套解决方案,iMaster NCE-Campus则是该方案下的产品。

基于iMaster NCE-Campus北向开放的API接口,华为智简园区网络解决方案面向行业构建开放的架构,帮助客户使能数字化的行业园区网络。

访问智简园区网络开发者社区,获取更多API接口信息。

您将开发什么?

在本次Codelab中,您将完成一个可与iMaster NCE-Campus对接的第三方认证应用,调用华为iMaster NCE-Campus的第三方认证API接口,实现网页重定向,访客的信息读取,访客上线与下线。

本次Codelab共分为6个步骤,分别为:

1.介绍 → 2.环境准备 → 3.应用开发 → 4.成果检验 → 5.恭喜您 → 6.资料参考

您将会学到什么?

  • 如何调用华为iMaster NCE-Campus的认证授权接口。
  • 华为授权API方式用户上下线流程。

2. 开发环境准备

本实验使用iMaster NCE-Campus控制器及华为云AP设备,您需要预约智简园区网络开发者社区沙箱环境。沙箱环境中已配置好组网及各种款型的设备,能够满足开发者各种调测需求。

沙箱预约

登录智简园区网络开发者社区预约系统,选择“快速体验>控制器、设备及终端”,申请一小时体验时长(本次体验约20min)。申请成功后,会展示申请到的iMaster NCE-Campus租户账号,北向账号和密码。

沙箱-申请

北向账号,北向URL将在编码调用API时用到,请勿关闭此页面。

沙箱体验

单击“前往体验”,输入刚刚获取的租户账号、密码,单击“登录”按钮,成功登录说明沙箱环境申请成功。

campus

克隆CodeHub代码

  1. 访问CodeHub控制台,右上角单击“新建项目”,选择Scrum,新建项目。

    Scrum

  2. 本次Codelab基于华为云,使用Devcloud托管代码,您可以在线使用华为CloudIDE编程。

    codehub

  3. 单击Fork,克隆代码库到本地私有仓库中,项目名和新建项目名称一致

    forkcode

使用华为Cloud IDE编程

  1. 登录CloudIDE,如果提示未开通则单击“OK”跳转至开通页面完成服务开通(提示:可以先领代金券后开通服务),成功登录后的页面如下:

  2. 单击‘新建实例’。

  3. 在工程配置步骤中选择已经创建的项目名称和包含仓库名的仓库地址。

  1. 单击“确定”进入CloudIDE。

  1. 进入CloudIDE后,界面如下:

IDE

3. 认证服务器开发

本章节您将尝试编写一个认证服务器Demo,与iMaster NCE-Campus云平台对接实现Wi-Fi用户认证。

认证流程介绍

此方案中由华为网络设备(Cloud AP)提供接入网络等功能,由华为云平台(iMaster NCE-Campus)提供用户授权管理、设备管理功能,由开发者应用提供Portal推送,校验信息等功能。

image

终端用户在需要访问互联网时,连接Wi-Fi的SSID,登录由认证服务器提供的Portal页面进行认证。认证服务器调用华为iMaster NCE-Campus云平台认证授权API,向AP设备授权终端用户的Wi-Fi接入权限,从而终端用户可以访问互联网。

3rd_auth_flow

认证服务器接收到终端提交的用户名、密码信息,校验完成后,需要对访客终端进行授权。开发者登录CloudIDE编写以下接口代码,iMaster NCE-Campus提供了以下三种接口(接口文档):

  • 授权终端用户
  • 查询授权结果
  • 强制用户下线

开发步骤

认证服务器需要实现3项功能:

  • Portal服务器(推送认证页面,接收用户登录信息,返回登录结果)
  • 解析,存储和校验用户信息
  • 调用API放通终端权限

本次Codelab要完成对接需要实现的业务

  • 使用Campus SDK 获取操作API权限
  • 用户被重定向至认证服务器,解析用户信息
  • 用户单击登录后,校验用户信息,调用上线API,并重定向至成功页面
  • 用户主动下线时,调用下线API

1.使用SDK获取API操作权限

  • 使用Campus SDK 获取操作API权限(com.huawei.codelabs.CampusApiClient.java)

API管理员信息在预约环境时提供,分别为北向账号,密码和北向URL

//获取API操作权限 //需要输入北向账号,密码,北向URL等参数 ApiClient apiClient = new ApiClient(); apiClient.setTenantName("openApiTest@north.com"); apiClient.setTenantPwd("Pwd"); apiClient.setHost("HOST"); apiClient.setPort("18002");

2.解析用户信息

  • 用户被重定向至认证服务器,解析用户信息

解析Request中用户信息,封装成SDK实体类(com.huawei.codelabs.CampusAuthSuccessHandler.java)

//解析Request中携带的信息并封装 UserAuthorizationInputDto userAuthorizationInoutDto = new UserAuthorizationInputDto(); userAuthorizationInoutDto.setTerminalIpV4(request.getParameter("uaddress")); userAuthorizationInoutDto.setTerminalMac(macAddTrans(request.getParameter("umac"))); userAuthorizationInoutDto.setSsid(request.getParameter("ssid")); userAuthorizationInoutDto.setDeviceMac(macAddTrans(request.getParameter("apmac"))) ; userAuthorizationInoutDto.setNodeIp(request.getParameter("nodeIp"));

3.使用解析后信息,调用上线API

  • 调用“授权终端用户”API,并将用户信息存入Cookie,在用户下线时继续使用(com.huawei.codelabs.CampusAuthSuccessHandler.java)
//调用授权终端用户API ClientUserManagerApi clientUserManagerApi = new ClientUserManagerApi(apiClient); CommonAuthorizationOutputDto commonAuthorizationOutputDto = clientUserManagerApi.userAuthorization(userAuthorizationInoutDto); System.out.println("userAuthorization : " + commonAuthorizationOutputDto.toString());
  • 调用“查询授权结果”API,确认授权成功;并返回到登录成功界面(com.huawei.codelabs.CampusAuthSuccessHandler.java)
//调用查询授权结果API commonAuthorizationOutputDto = clientUserManagerApi.getAuthorizationresult(commonAuthorizationOutputDto.getPsessionid(),userAuthorizationInoutDto.getNodeIp()); System.out.println("getAuthResult : " + commonAuthorizationOutputDto.toString()); // 重定向到成功页面,同时传递登录信息 response.sendRedirect("/success.html?" + request.getQueryString() + "&username=" + userAuthorizationInoutDto.getUserName() + "&psessionid=" + commonAuthorizationOutputDto.getPsessionid());

4.用户主动下线,调用下线API

  • 解析请求URL中存储的用户数据(com.huawei.codelabs.CampusLogoutHandler.java)
//解析请求URL中用户信息 ThirdUserInfoData thirdUserInfoData = new ThirdUserInfoData(); thirdUserInfoData.setNodeIp(request.getParameter("nodeIp")); thirdUserInfoData.setUserName(request.getParameter("username")); thirdUserInfoData.setDeviceMac(macAddTrans(request.getParameter("apmac"))); thirdUserInfoData.setTerminalIpV4(request.getParameter("uaddress")); thirdUserInfoData.setTerminalMac(macAddTrans(request.getParameter("umac"))); thirdUserInfoData.setPsessionid(request.getParameter("psessionid")); System.out.println("thirdUserInfoData : " + thirdUserInfoData.toString());
  • 调用”强制用户下线“API(com.huawei.codelabs.CampusLogoutHandler.java)
//调用强制用户下线API ClientUserManagerApi clientUserManagerApi = new ClientUserManagerApi(apiClient); clientUserManagerApi.cutUser(new CutUserInputDto().addThirdUserInfosItem(thirdUserInfoData)); response.sendRedirect("/login.html?" + request.getQueryString());

4. 成果检验

认证应用启动

服务器启动

1.程序的主入口单击Run(com.huawei.codelabs.Application.java)

RUN

此时Spring已正常启动

RUN

2.将程序映射至公网

右上角PORT EXTERNAL ACCESS,注册端口(默认为8088端口),并进入。

RUN

单击“Access”进入后我们可以进入Portal的登录界面:

RUN

——至此,应用启动完成。

iMaster NCE-Campus配置认证对接

配置SSID

SSID是用户搜索Wi-Fi时,看到的信号名称,配置此步,您将完成新建一个Wi-Fi热点。

指定中继认证API方式,本次Codelab可以实现对无线接入的终端用户准入控制。

1.在主菜单选择“配置>站点配置>AP>SSID”。

NCE

2.选择"创建",输入您喜欢的SSID名称,选择网络连接方式为“NAT”,单击“下一步”

NCE

3.配置终端用户使用SSID接入网络时的认证方式。

设置“认证方式”为“开放网络”,“是否推送页面(Portal认证)”为“ON”,“页面推送方式”为“云平台中继认证”,“对接方式”为“API”。

NCE

4.配置默认放行推送的Portal页面地址。

单击“默认放行规则”右侧的“选择模板”,在弹出的“选择模板”对话框中单击“创建”,设置ACL模板规则。

下图以将域名 “instance42w9pjcdyogsg5yu-service-server-8088-cce-7.lf.templink.dev” 加入默认放行规则为例**(本次Codelab需要将IDE生成的域名复制过来,本地搭建时使用可达的域名或IP)**。

说明:配置默认放行规则,添加默认放行的地址或域名后,用户在认证前可访问该地址或域名。

NCE

配置Portal页面推送策略

云平台中继API认证模式下,用户需配置Portal 推送策略。当终端关联WI-FI后,根据Portal推送策略给终端用户推送指定的Portal页面。

1.设置Portal页面推送名称和关联的SSID。

在主菜单中选择“准入 > 用户准入 > 准入策略 > Portal页面推送策略”,选择相应站点。

选择“设备类型”,单击“创建”,配置Portal页面推送策略。

NCE

2.配置对接方式和三方认证URL。

第三方认证URL使用CloudIDE提供的URL即可,例如本例中使用是“https://instance42w9pjcdyogsg5yu-service-server-8088-cce-7.lf.templink.dev/login.html/”。

NCE

3.单击“应用”。

——至此,对接配置已完成。

结果验证

打开沙箱申请页面,单击“进入拓扑”,会打开沙箱拓扑页面。单击PC上的“连接”,能够登录沙箱实验室中的终端跳转机中,通过此跳转机能够连接沙箱实验室中设备发出的SSID信号,进行远程验证。

沙箱-拓扑

使用终端连接教程中创建的Wi-Fi信号,会自动跳转到本次CodeLab的服务器地址(提示:如果没有自动弹出Portal页面,可以手动打开跳转机中的Chrome浏览器,在地址栏中输入1.1.1.1,触发页面重定向)。

跳转机-wifi

iMaster Cloud-Campus控制器会自动在认证服务器URL中添加终端、设备信息,方便第三方Portal服务器进行授权参数获取。

认证服务器获取这些参数,调用控制器提供的授权接口。如果终端能够正常登陆、下线,说明第三方Portal服务器对接成功。

登录,输入用户名、密码(代码中默认用户名和密码均为“123”):

login

登录成功,终端能够成功访问互联网:

loginSuccess

单击“Logout”,注销。返回登录页面。

loginSuccess

5. 恭喜您

干得好,您已经成功完成此Codelab教程。恭喜您成为知识小达人,又获得以下技能:

  • 如何使用iMaster NCE-Campus配置云中继Wi-Fi SSID
  • 如何开发认证服务器能与iMaster NCE-Campus对接用户信息
  • 如何对接iMaster NCE-Campus的第三方认证接口,使用户上下线

6. 参与互动赢好礼

请保存完成截图参与互动,精美礼品等您来拿!。 闯关有礼