云平台中继认证(API方式)方案
本文档介绍的是通过调用API方式对访客进行授权,允许访客接入网络的方案。
功能概述
第三方合作伙伴或开发者为接入访客提供认证Portal页面(如下图),并调用华为iMaster NCE-Campus API授权接口,或通过标准Radius协议与iMaster NCE-Campus交互,从而实现认证、计费、用户分析、市场营销等服务。
环境拓扑
此方案中由华为网络设备(Cloud AP)提供接入网络等功能,由华为云平台(iMaster NCE-Campus)提供用户授权管理、设备管理功能,由开发者应用提供Portal推送,校验信息等功能。
认证流程
终端用户在需要访问互联网时,连接Wi-Fi的SSID,登录由开发者应用推送的Portal页面进行认证。开发者应用调用华为iMaster NCE-Campus云平台认证授权API,给AP设备授权终端用户的Wi-Fi接入权限,从而终端用户可以访问互联网。
图1 iMaster NCE-Campus与开发者应用通过API方式交互
开发者应用,可以根据客户需求进行Portal页面定制、广告推送等应用,主要包含如下两大子系统:
Portal Server:用于提供访客的Portal认证,广告推送等功能。
授权平台:用于在合适的场景调用云平台的API接口,实现对终端的接入控制能力(如授权终端权限、查询授权结果、强制用户下线等)。
访客接入流程
Step 1
访客接入Wi-Fi网络,访问任意页面(例如http://1.1.1.1/
),经过AP转发时,被AP重定向到云平台上(189.180.13.187是云平台的地址),重定向时会携带ap-mac, redirect-url, SSID, uaddress, umac等信息给云平台。
Step 2
云平台收到访问请求,重定向到配置的第三方Portal界面,携带apmac,uaddress,umac,SSID(base64加密后),nodeIp,siteId等信息给开发者应用,用于记录和分析。
Step 3
用户访问到第三方Portal界面,填入用户名和密码后单击“登录”。浏览器将用户名和密码POST到开发者应用的后台。
Step 4
开发者应用后台收到用户信息后,应用进行用户信息校验,校验通过后通过调用华为云平台授权终端用户的API接口,对此用户进行授权,放通用户的网络权限。放通权限后,开发者应用再调用云平台的查询授权结果接口,如果返回200 OK,则说明用户已获取网络权限。
调用授权API后的用户状态为success状态:
Step 5
开发者应用确认用户已获取网络权限后,重定向浏览器界面至登录成功页面,用户上线流程结束。
Step 6
用户想要主动下线时,单击“注销”。开发者应用收到相应后,查找此用户对应信息,调用华为云平台的强制用户下线API,收回用户的网络权限。
调用结束后,重定向浏览器界面至注销成功页面,此时用户在访问网络时需要重新登录。
调用的API信息
授权终端用户
典型场景
用户授权接口。
接口功能
根据认证用户信息,授予用户对应权限。
接口约束
该接口支持北向操作管理员访问,必须在用户会话建立后使用。
调用方法
POST
URI
/controller/cloud/v2/northbound/accessuser/haca/authorization
请求参数
表1 body参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
body | 是 | REFERENCE | 详细请参见表2。 | 详细请参见表2。 | 授权信息。 |
表2 body对象的参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
deviceMac | 否 | string | - | - | 设备MAC地址,MAC和ESN至少有一个必填。 |
deviceEsn | 否 | string | - | - | 设备ESN地址,MAC和ESN至少有一个必填。 |
apMac | 否 | string | - | - | AP的MAC地址。 |
ssid | 是 | string | - | - | AP ssid名称的BASE64编码。 |
policyName | 否 | string | - | - | 访问控制策略名称,为空时不做访问策略控制。 |
terminalIpV4 | 否 | string | - | - | 终端IPV4地址,terminalIpV4和terminalIpV6有且只有一个必填。 |
terminalIpV6 | 否 | string | - | - | 终端IPV6地址,terminalIpV4和terminalIpV6有且只有一个必填。 |
terminalMac | 是 | string | - | - | 终端MAC。 |
userName | 是 | string | - | - | 用户名。 |
nodeIp | 是 | string | - | - | 授权节点地址。 |
temPermitTime | 否 | integer | [0-600] | - | 临时放行时长,单位秒。报文中不传递此参数或取值为0时,终端用户访问网络无时间限制。 |
请求示例
cURL的示例
curl -k -s -L -i -X POST -H 'Content-Type: application/json' -H 'accept: application/json' -H 'Accept-Language: en-US' -H 'X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925' 'https://192.168.1.125:18002/controller/cloud/v2/northbound/accessuser/haca/authorization' -d '{
"deviceMac": "4C-FA-CA-1F-02-00",
"deviceEsn": "21500829352SG5900059",
"apMac": "4C-FA-CA-C1-9C-20",
"ssid": "dcd=",
"policyName": "aa",
"terminalIpV4": "10.66.85.177",
"terminalIpV6": "1030::C9B4:FF12:48AA:1A2B",
"terminalMac": "64-80-99-CF-8A-32",
"userName": "test",
"nodeIp": "192.168.211.236",
"temPermitTime": 300
}'
HTTP的示例
POST /controller/cloud/v2/northbound/accessuser/haca/authorization HTTP/1.1
Host: 192.168.1.125:18002
Content-Type: application/json
Accept: application/json
Accept-Language: en-US
X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925
{
"deviceMac": "4C-FA-CA-1F-02-00",
"deviceEsn": "21500829352SG5900059",
"apMac": "4C-FA-CA-C1-9C-20",
"ssid": "dcd=",
"policyName": "aa",
"terminalIpV4": "10.66.85.177",
"terminalIpV6": "1030::C9B4:FF12:48AA:1A2B",
"terminalMac": "64-80-99-CF-8A-32",
"userName": "test",
"nodeIp": "192.168.211.236",
"temPermitTime": 300
}
响应参数
返回状态码为200:操作成功,返回会话ID。
表3 CommonAuthorizationOutputDto对象的参数列表
参数名称 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|
errcode | string | - | - | 错误码。 |
errmsg | string | - | - | 错误信息描述。 |
psessionid | string | - | - | 会话ID。 |
返回状态码为400:校验异常。
详细信息请参见实际响应消息体。
返回状态码为500:内部错误。
详细信息请参见实际响应消息体。
响应示例
HTTP/1.1 200 OK
Date: Sun,20 Jan 2019 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
{
"errcode": "0",
"errmsg": "",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d"
}
强制用户下线
典型场景
提供强制用户下线北向接口。
接口功能
强制用户下线。
接口约束
该接口支持北向操作管理员访问,必须在用户会话建立后使用。
调用方法
POST
URI
/controller/cloud/v2/northbound/accessuser/haca/cutuser
请求参数
表4 body参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
body | 是 | REFERENCE | 详细请参见表5。 | 详细请参见表5。 | 用户信息。 |
表5 body对象的参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
thirdUserInfos | 否 | ARRAY_REFERENCE | 1-100个列表项,详细请参见表6。 | 1-100个列表项,详细请参见表6。 | - |
表6 thirdUserInfos对象的参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
deviceMac | 否 | string | - | - | 设备MAC地址,MAC和ESN至少有一个必填。 |
deviceEsn | 否 | string | - | - | 设备ESN地址,MAC和ESN至少有一个必填。 |
terminalIpV4 | 否 | string | - | - | 终端IPV4地址,terminalIpV4和terminalIpV6有且只有一个。 |
terminalIpV6 | 否 | string | - | - | 终端IPV6地址,terminalIpV4和terminalIpV6有且只有一个。 |
terminalMac | 是 | string | - | - | 终端MAC。 |
userName | 是 | string | - | - | 用户名。 |
psessionid | 是 | string | - | - | 会话ID。 |
nodeIp | 是 | string | - | - | 授权节点地址。 |
请求示例
cURL的示例
curl -k -s -L -i -X POST -H 'Content-Type: application/json' -H 'accept: application/json' -H 'Accept-Language: en-US' -H 'X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925' 'https://192.168.1.125:18002/controller/cloud/v2/northbound/accessuser/haca/cutuser' -d '{
"thirdUserInfos": [{
"deviceMac": "4C-FA-CA-1F-02-00",
"deviceEsn": "21500829352SG5900059",
"terminalIpV4": "10.66.85.177",
"terminalIpV6": "1030::C9B4:FF12:48AA:1A2B",
"terminalMac": "64-80-99-CF-8A-32",
"userName": "test",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d",
"nodeIp": "192.168.211.236"
}]
}'
HTTP的示例
POST /controller/cloud/v2/northbound/accessuser/haca/cutuser HTTP/1.1
Host: 192.168.1.125:18002
Content-Type: application/json
Accept: application/json
Accept-Language: en-US
X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925
{
"thirdUserInfos": [{
"deviceMac": "4C-FA-CA-1F-02-00",
"deviceEsn": "21500829352SG5900059",
"terminalIpV4": "10.66.85.177",
"terminalIpV6": "1030::C9B4:FF12:48AA:1A2B",
"terminalMac": "64-80-99-CF-8A-32",
"userName": "test",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d",
"nodeIp": "192.168.211.236"
}]
}
响应参数
返回状态码为200:查询成功。
表7 CutUserOutputDto对象的参数列表
参数名称 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|
errcode | string | - | - | 错误码。 |
errmsg | string | - | - | 错误信息描述。 |
success | ARRAY_REFERENCE | 详细请参见表8。 | 详细请参见表8。 | - |
failure | ARRAY_REFERENCE | 详细请参见表9。 | 详细请参见表9。 | - |
表8 success对象的参数列表
参数名称 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|
message | string | - | - | 成功结果。 |
psessionid | string | - | - | 用户会话ID。 |
表9 failure对象的参数列表
参数名称 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|
message | string | - | - | 成功结果。 |
psessionid | string | - | - | 用户会话ID。 |
返回状态码为400:校验异常。
详细信息请参见实际响应消息体。
返回状态码为500:内部错误。
详细信息请参见实际响应消息体。
响应示例
HTTP/1.1 200 OK
Date: Sun,20 Jan 2019 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
{
"errcode": "0",
"errmsg": "",
"success": [{
"message": "success",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d"
}],
"failure": [{
"message": "success",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d"
}]
}
查询授权结果
典型场景
提供授权结果查询北向接口。
接口功能
根据授权回话ID,查询授权结果。
接口约束
该接口支持北向操作管理员访问,必须在用户会话建立后使用。
调用方法
GET
URI
/controller/cloud/v2/northbound/accessuser/haca/authorizationresult/{psessionid}
表10 path参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
psessionid | 是 | string | - | - | 会话ID。 |
表11 query参数列表
参数名称 | 必选 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|---|
nodeIp | 是 | string | - | - | 授权节点地址。 |
请求参数
无
请求示例
cURL的示例
curl -k -s -L -i -X GET -H 'Content-Type: application/json' -H 'accept: application/json' -H 'Accept-Language: en-US' -H 'X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925' 'https://192.168.1.125:18002/controller/cloud/v2/northbound/accessuser/haca/authorizationresult/5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d?nodeIp=192.168.211.236'
HTTP的示例
GET /controller/cloud/v2/northbound/accessuser/haca/authorizationresult/5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d?nodeIp=192.168.211.236 HTTP/1.1
Host: 192.168.1.125:18002
Content-Type: application/json
Accept: application/json
Accept-Language: en-US
X-ACCESS-TOKEN: CA48D152F6B19D84:637C38259E6974E17788348128A430FEE150E874752CE754B6BF855281219925
响应参数
返回状态码为200:添加成功。
表12 CommonAuthorizationOutputDto对象的参数列表
参数名称 | 类型 | 参数值域 | 默认值 | 参数说明 |
---|---|---|---|---|
errcode | string | - | - | 错误码。 |
errmsg | string | - | - | 错误信息描述。 |
psessionid | string | - | - | 会话ID。 |
返回状态码为400:校验异常。
详细信息请参见实际响应消息体。
返回状态码为500:内部错误。
详细信息请参见实际响应消息体。
响应示例
HTTP/1.1 200 OK
Date: Sun,20 Jan 2019 10:00:00 GMT
Server: example-server
Content-Type: application/json;charset=UTF-8
Content-Length: 250
Connection: keep-alive
{
"errcode": "0",
"errmsg": "",
"psessionid": "5ea660be98a84618fa3d6d03f65f47ab578ba3b4216790186a932f9e8c8c880d"
}
附件
API方式访客接入流程的完整HTTP请求信息:
参考
您可以前往,了解更多相关的信息。
- 点赞
- 收藏
- 关注作者
评论(0)