4.3 正向认证
正向认证,即OM对应用服务器的认证,包括IP认证和数字签名认证两种方式,您可以根据自己的实际场景选择一种来完成认证。
一、IP认证
IP认证,只允许某一固定IP地址向OM发送API请求,其他地址统统认为没有权限。
适用的应用场景:
- 应用服务器的IP地址/域名固定;
- 一个应用服务器对接一台OM;
- 应用服务器和OM之间网络互通。
配置
配置方法,如下图所示:
参数说明:
- 服务器地址: 应用服务器的IP地址/域名和监听端口,如:192.168.130.27:8989。如果用户未指定端口时默认为80端口。
- URL: 接收API报告的相对路径(也可不填写)。格式为:{part1}/{part2}/{part3}/{……},如:omapi/report。
服务器地址和URL组合起来即为应用服务器接收API报告的全路径,如:192.168.130.27:8989/omapi/report。
应用服务器地址有两个作用:
接收API报告:OM会将API消息推送给这个地址;
访问权限控制: OM只受理从该服务器的IP地址(端口不影响)发送的API请求;拒绝受理从其它地址发送的API请求,并对该请求响应Unauthorized。
二、数字签名认证
数字签名认证本质上是通过验证OM和应用服务器双方持有的秘钥来完成认证。
说明:设备接收消息时,优先走IP认证,若IP认证不通过,再进行数字认证。
点击这里下载开源代码。
版本要求
OM软件版本:Rev 2.1.5.99及其以上。
适用的应用场景:
- 应用服务器采用动态域名,IP地址不固定;
- 一个OM要对接多个API应用服务器;
- API应用客户端要直接访问OM;
- API消息的源地址发生变化;
- 应用服务器通过迅时云平台转发消息给OM。
配置
配置参数:数字签名认证密码(接收)和数字签名有效期。
这两个参数可在OM的Web页面上进行配置(web版本须在1.0.91_p1及以上,web版本查看方法:在地址栏ip地址后面输入version,回车,如http://192.168.130.186/version。
若web版本较低,可通过在浏览器地址栏输入对应的URL接口进行参数查询和配置。
配置界面,如下图所示:
参数说明:
- API数字认证密码(接收):OM对应用服务器认证的秘钥,可自定义,需和应用服务器发送请求时携带的秘钥保持一致。
- API数字认证有效期:可自定义,范围:0~86400,单位:秒,只有在该有效期内认证参数才有效,0表示永久有效。
认证原理
首先,应用服务器和OM双方需要配置相同的API密码(API_Pasword)。
API_Password是认证的根本依据。每当OM收到一个API请求时,都带上一段由API_Password生成的认证信息,OM通过判断请求方的API_Pasword和自己的是否相等,从而判断请求方是否有执行权限。
为了保证API_Password的网络传输安全,不被黑客通过网络抓包所窃取。所以,我们并不直接在网络上传输API_Password,而是传输其数字签名。
交互流程
1. 当应用服务器向OM发送API请求消息,需要携带上由API Password经过数字签名生成的认证信息(Auth),
Auth由三部分组成:
- nonce——由应用服务器生成的随机数;
- timestamp——由应用服务器生成的时间戳;
- signature——数字签名,先将API Password、nonce、timestamp三个参数值拼接起来,然后对其进行md5运算得到的32位小写字符串。即,signature=md5(API Password+nonce+timestamp)。
2. 当OM收到API请求消息后,用自己的API_Pasword(此处用API_Password"表示)加上【API请求消息中的nonce和timestamp】进行md5运算,即signature"=md5(API_Password"+nonce+timestamp),OM对比signature"和signature是否相等,从而推出API_Password"和API_Password是否相等。如果相等,则说明请求方有执行权限,否则没有。
3. 之后,为了保证效率,OM并不要求每次API请求都要更新Auth,而是会保证在一段有效期(API_TIMEOUT)内该Auth可以重复使用。(API_TIMEOUT的配置方法见本文最后一部分)
4. 如果有效期过期或认证信息错误,OM会给请求方响应unauthorized及其错误码。
接口说明
1. 带认证消息的请求消息示例
<?xml version="1.0" encoding="utf-8" ?>
<Auth>
<Timestamp>1455433892</Timestamp>
<nonce>14314</nonce>
<Signature>890b422b75c1c5cb706e4f7921df1d94e69c17f4</Signature>
</Auth>
<Control attribute="Query">
<DeviceInfo/>
</Control>
其中,Auth结点为认证信息,Control结点为实际要执行的内容,可根据实际情况更换。
参数说明
参数名称 | 类型 | 参数说明 |
---|---|---|
nonce | string | 由应用服务器生成的随机数,最大长度32位。 |
timestamp | string | 应用服务器生成该随机数时的时间戳,从1970年1月1日0点0分0秒开始到现在的秒数。 |
signature | string | 数字签名,32位小写。计算方法为:将API Password、nonce、timestamp三个参数的值按先后顺序拼接成一个字符串并对其进行md5运算。其中API Password是应用服务器和OM双方持有的相同密码。 |
2. 认证失败的响应消息格式
<?xml version="1.0" encoding="utf-8" ?>
<unauthorized/>
<err code=”XXX” reason=”XXX”/>
参数说明:
Code | Reason | 描述说明 |
---|---|---|
100 | authentication failed | 认证失败。可能原因:API请求消息中没有携带认证信息。 |
101 | mandatory parameter missing | 参数不完整。认证信息必须同时包含nonce、timestamp、signature三个参数 |
102 | password validation failure | 密码鉴权失败 |
103 | nonce timeout | nonce 过期, nonce的最大有效期由配置参数API_TIMEOUT 决定 |
104 | unspecified | 其它 |