背景

一般来说,搜索到ONVIF设备之后,就是获取设备的接口和信息。调用设备的接口,有些是需要鉴权的,有些则是不需要。在调用其它接口之前,我们先说一下鉴权的事情。

文章发表的顺序可能有点乱,麻烦根据《基于ONVIF协议的摄像机监控管理平台(1)概述》里面的文章目录进行阅读,抱歉了


一、哪些接口需要鉴权

关于这个问题,我就不细说了,有需要的可以看一下另外一篇文章。
《 ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)》



  • 只有以下的接口是可以在不认证的情况下调用的。
    • GetWsdlUrl
    • GetServices
    • GetServiceCapabilities
    • GetCapabilities
    • GetHostname
    • GetSystemDateAndTime
    • GetEndpointReference
    • GetRelayOutputOptions

二、怎么用http和xml发送请求,调用ONVIF接口

上一篇文章已经讲过这个问题。有需要的可以看一下我上一篇文章。
《基于ONVIF协议的摄像机监控管理平台(6) webservice,soap和http》

三、关于ONVIF接口的鉴权

  1. 如果是用gSOAP生成的ONVIF框架的话,可以直接调用,甚至不需要知道鉴权的原理。需要看gSOAP的代码怎么用的话,我后续可能会补充几篇文章吧。



  2. 我这里主要讲述一下思路和原理。

  3. 鉴权和认证,指的是需要验证用户名账号和密码,确保的那些和隐私相关的信息不能随便被人查看。

  4. 之前提到了我们调用ONVIF的接口用的是SOAP方式。



  5. ONVIF把用户区分成几类,没有认证的那些就是Anonymous。

    • Administrator
    • Operator
    • User
    • Anonymous
  6. ONVIF 认证方式分为两层



  • HTTP层,使用 [RFC2617] 定义的 Digest Authenticaion
  • Web Service 层(也就是XML信息中),使用 WS-Security Network 定义的 user name token profile 机制
  1. 具体的详细细节可以参考官方文档《ONVIF-Core-Specification-v1712.pdf》

  2. 认证的流程图如下。
    ONVIF鉴权认证流程图

四、Digest认证(摘要认证)是什么鬼

  1. 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
  2. http认证的流程
    • a.客户端发起GET请求
    • b.服务器响应401 Unauthorized,WWW-Authenticate指定认证算法,realm指定安全域
    • c.客户端重新发起请求,Authorization指定用户名和密码信息
    • d.服务器认证成功,响应200,可选Authentication-Info
  3. 所谓Digest摘要认证,就是在上述第2步时,服务器会返回一个随机的字符串nonce,而客户端则需要使用这个随机字符串进行一系列运算,得到一个摘要,发送给服务器进行认证。
    摘要的计算方法为:MD5(HA1:nonce:HA2),其中HA1=MD5(username:realm:password),HA2=MD5(method:digestURI)

五、User Name Token 认证(令牌认证)又是什么鬼

  1. Token令牌认证主要是在web service层的,也就是写在 XML文件里面的。
  2. 也就是通过 SOAP 的XML消息的安全头,将具有密码文本的 UsernameToken 发送至 Web Service 服务端。
  3. 除了必须提供用户名或密码之外,还可以配置策略以在 UsernameToken 中包含 nonce 和 created 时间戳记。
  4. 举个例子说明一下(我用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>
    
  5. 其中包含了username,token,nonce 和 created 。

六、怎么使用这两种认证方式

关于怎么使用Digest认证和User Name Token 认证进行正确鉴权,从而合法调用ONVIF接口,可以参考我接下来的的两篇文章。
《基于ONVIF协议的摄像机监控管理平台(7)鉴权和认证二》
《基于ONVIF协议的摄像机监控管理平台(7)鉴权和认证三》

后记

有任何的疑问或者想法,或者对本文有质疑或者补充的话,欢迎在留言区评论,期待你的分享!


同时,也欢迎关注本人微信公众号或者打赏一下这篇文章。

参考文章
《http digest》



http://xzh.i3geek.com

爱唠叨的老鱼

爱唠叨的老鱼

技术经理,个人站长,创业者

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据