背景
一般来说,搜索到ONVIF设备之后,就是获取设备的接口和信息。调用设备的接口,有些是需要鉴权的,有些则是不需要。在调用其它接口之前,我们先说一下鉴权的事情。
目录
文章发表的顺序可能有点乱,麻烦根据《基于ONVIF协议的摄像机监控管理平台(1)概述》里面的文章目录进行阅读,抱歉了
一、哪些接口需要鉴权
关于这个问题,我就不细说了,有需要的可以看一下另外一篇文章。
《 ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)》
- 只有以下的接口是可以在不认证的情况下调用的。
- GetWsdlUrl
- GetServices
- GetServiceCapabilities
- GetCapabilities
- GetHostname
- GetSystemDateAndTime
- GetEndpointReference
- GetRelayOutputOptions
二、怎么用http和xml发送请求,调用ONVIF接口
上一篇文章已经讲过这个问题。有需要的可以看一下我上一篇文章。
《基于ONVIF协议的摄像机监控管理平台(6) webservice,soap和http》
三、关于ONVIF接口的鉴权
- 如果是用gSOAP生成的ONVIF框架的话,可以直接调用,甚至不需要知道鉴权的原理。需要看gSOAP的代码怎么用的话,我后续可能会补充几篇文章吧。
我这里主要讲述一下思路和原理。
鉴权和认证,指的是需要验证用户名账号和密码,确保的那些和隐私相关的信息不能随便被人查看。
之前提到了我们调用ONVIF的接口用的是SOAP方式。
ONVIF把用户区分成几类,没有认证的那些就是Anonymous。
- Administrator
- Operator
- User
- Anonymous
- ONVIF 认证方式分为两层。
- HTTP层,使用 [RFC2617] 定义的 Digest Authenticaion。
- Web Service 层(也就是XML信息中),使用 WS-Security Network 定义的 user name token profile 机制。
具体的详细细节可以参考官方文档《ONVIF-Core-Specification-v1712.pdf》
认证的流程图如下。
四、Digest认证(摘要认证)是什么鬼
http的认证分为以下几种,有兴趣的可以自行查找资料。
- Basic authentication
- Digest authentication
- WSSE(WS-Security) HTTP authentication
- token Authentication
- OAuth1.0 Authentication
- OAuth2.0 Authentication
- Kerberos
- NTLM
- Hawk Authentication
- AWS Signature
- https
- http认证的流程
- a.客户端发起GET请求
- b.服务器响应401 Unauthorized,WWW-Authenticate指定认证算法,realm指定安全域
- c.客户端重新发起请求,Authorization指定用户名和密码信息
- d.服务器认证成功,响应200,可选Authentication-Info
- 所谓Digest摘要认证,就是在上述第2步时,服务器会返回一个随机的字符串nonce,而客户端则需要使用这个随机字符串进行一系列运算,得到一个摘要,发送给服务器进行认证。
摘要的计算方法为:MD5(HA1:nonce:HA2),其中HA1=MD5(username:realm:password),HA2=MD5(method:digestURI)
五、User Name Token 认证(令牌认证)又是什么鬼
- Token令牌认证主要是在web service层的,也就是写在 XML文件里面的。
- 也就是通过 SOAP 的XML消息的安全头,将具有密码文本的 UsernameToken 发送至 Web Service 服务端。
- 除了必须提供用户名或密码之外,还可以配置策略以在 UsernameToken 中包含 nonce 和 created 时间戳记。
举个例子说明一下(我用wireshark抓取的onvif test tool 发送给摄像机的数据包)。
<?xml version="1.0" encoding="utf-8" ?> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:UsernameToken> <wsse:Username> admin </wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"> ruT5qfhOglnGI1vYV7pA90ueKho= </wsse:Password> <wsse:Nonce> iUUEHueQ9nkfitZ97fwgRA== </wsse:Nonce> <wsu:Created> 2017-12-27T08:08:26Z </wsu:Created> </wsse:UsernameToken> </wsse:Security> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <GetDeviceInformation xmlns="http://www.onvif.org/ver10/device/wsdl"/> </s:Body> </s:Envelope>
- 其中包含了username,token,nonce 和 created 。
六、怎么使用这两种认证方式
关于怎么使用Digest认证和User Name Token 认证进行正确鉴权,从而合法调用ONVIF接口,可以参考我接下来的的两篇文章。
《基于ONVIF协议的摄像机监控管理平台(7)鉴权和认证二》
《基于ONVIF协议的摄像机监控管理平台(7)鉴权和认证三》
后记
有任何的疑问或者想法,或者对本文有质疑或者补充的话,欢迎在留言区评论,期待你的分享!
同时,也欢迎关注本人微信公众号或者打赏一下这篇文章。
参考文章
《http digest》
http://xzh.i3geek.com
0 条评论