2012-05-29 9 views
5

wir haben Netzwerk-IP-Kamera, die ONVIF-Protokoll unterstützt. Als ich versuchte, seine PTZ-Konfiguration zu erhalten, gibt es einen Auth-Fehler. Ich implementiere das in C. Nachstehend sind die Anfrage und Antwort.Wie authentifiziere ich Benutzer in ONVIF?

Anfrage:

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
    "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\"" 
    "xmlns:tds=\"http://www.onvif.org/ver20/ptz/wsdl\">" 
    "<soap:Body>" 
    "<tds:GetNodes/>" 
    "</soap:Body>" 
    "</soap:Envelope>" 

Antwort:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" 
       xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       xmlns:wsa5="http://www.w3.org/2005/08/addressing" 
       xmlns:c14n="http://www.w3.org/2001/10/xml-exc-c14n#" 
       xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
       xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
       xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
       xmlns:ptzimg2="http://www.onvif.org/ver10/schema" 
       xmlns:ptzimg3="http://www.w3.org/2005/05/xmlmime" 
       xmlns:ptzimg4="http://docs.oasis-open.org/wsn/b-2" 
       xmlns:ptzimg5="http://docs.oasis-open.org/wsrf/bf-2" 
       xmlns:ptzimg6="http://docs.oasis-open.org/wsn/t-1" 
       xmlns:ptzimg1="http://www.onvif.org/ver20/ptz/wsdl" 
       xmlns:ptzimg7="http://www.onvif.org/ver20/imaging/wsdl" 
       xmlns:ter="http://www.onvif.org/ver10/error"> 

<SOAP-ENV:Body> 
    <SOAP-ENV:Fault> 
     <SOAP-ENV:Code> 
      <SOAP-ENV:Value> 
       SOAP-ENV:Sender 
      </SOAP-ENV:Value> 
      <SOAP-ENV:Subcode> 
       <SOAP-ENV:Value> 
        ter:NotAuthorized 
       </SOAP-ENV:Value> 
      </SOAP-ENV:Subcode> 
     </SOAP-ENV:Code> 
     <SOAP-ENV:Reason> 
      <SOAP-ENV:Text xml:lang="en"> 
       Sender Not Authorized 
      </SOAP-ENV:Text> 
     </SOAP-ENV:Reason> 
     <SOAP-ENV:Node> 
      http://www.w3.org/2003/05/soap-envelope/node/ultimateReceiver 
     </SOAP-ENV:Node> 
     <SOAP-ENV:Role> 
      http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver 
     </SOAP-ENV:Role> 
     <SOAP-ENV:Detail> 
      The action requested requires authorization and the sender is not authorized 
     </SOAP-ENV:Detail> 
    </SOAP-ENV:Fault> 
</SOAP-ENV:Body> 

Wie kann ich Benutzer authentifizieren? Dank

+0

Frage: Handkodieren Sie Ihre SOAP? F: Was ist das Kameramodell und der Hersteller? Unterstützen sie eine Interface-Bibliothek? Oder irgendwelche Spezifikationen (neben der WSDL)? Hast du versucht, sie zu kontaktieren (zumindest für Beispielcode)? – paulsm4

+0

Es ist eine Canon-Kamera, VB-M40. Diese Authentifizierungsmethode finden Sie in der ONVIF-Programmieranleitung. "http://www.onvif.org/Portals/0/documents/WhitePapers/ONVIF_WG-APG-Application_Programmer%27s_Guide.pdf" –

Antwort

2

die Befehle, für die eine Authentifizierung erforderlich war. Ihre Authentifizierungsheader können so hinzugefügt werden.

snprintf(postData, sizeof(postData), 
      "<?xml version=\"1.0\" encoding=\"utf-8\"?>" 
      "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://www.w3.org/2003/05/soap-envelope\"" 
      "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\"" 
      "xmlns:tds=\"http://www.onvif.org/ver20/ptz/wsdl\">" 
      "<SOAP-ENV:Header><wsse:Security><wsse:UsernameToken>" 
      "<wsse:Username>%s</wsse:Username>" 
      "<wsse:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-" 
      "200401-wss-username-token-profile-1.0#PasswordDigest\">" 
       "%s</wsse:Password><wsse:Nonce>%s</wsse:Nonce>" 
      "<wsu:Created>%s</wsu:Created></wsse:UsernameToken>" 
      "</wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body>" 
      "<tds:GetNodes>" 
      "</SOAP-ENV:Body></SOAP-ENV:Envelope>", 
      username, base64EncDigest, nonce_char, time_char); 
+0

Wie generieren Sie das Passwort Digest? Ich schaue durch die ONVIF-Programmierer-API und es sieht so aus, als ob der Passwort-Digest durch Ausführen von Digest = B64ENCODE (SHA1 (B64DECODE (Nonce) + Datum + Passwort) erzeugt wird), aber Datum und Passwort sind Zeichenfolgen, in die konvertiert wurde binär. Was bedeutet es, eine Zeichenkette in eine binäre umzuwandeln? Wie haben Sie den Digest generiert? – CadentOrange

+0

der nonce_char sollte Base64-codiert sein? Was ist time_char? ist es Timestamp oder aktuelle Zeit wie 2014-01-02T12: 47: 08Z – kashifmehmood

1

Sie können gSOAP verwenden mit WSSE Plugin C++ Client-Proxy von ONVIF WDSL zu generieren, die Sie benötigen.

Tun Sie das stark vereinfacht meine Arbeit. Hier ist ein Beispiel für den Aufruf von GetVideoEncoderConfiguration und das Lesen der Antwort.

_media__GetVideoEncoderConfigurations query; 
_media__GetVideoEncoderConfigurationsResponse response; 

soap_wsse_add_Security(&mediaProxy); 
soap_wsse_add_UsernameTokenDigest(&mediaProxy, NULL, m_username.c_str(), m_password.c_str()); 

if(mediaProxy.GetVideoEncoderConfigurations(&query, &response) == SOAP_OK) 
{ 
    LogSuccess("GetVideoEncoderConfigurations"); 
    for(auto it = response.Configurations.begin(); it != response.Configurations.end(); ++it) 
    { 
     onvif__VideoEncoderConfiguration* videoConf = *it; 
     log(I3) << "Name= " << videoConf->Name << ", Encoding=" << videoConf->Encoding << ", Resolution=" << videoConf->Resolution->Width << "x" << videoConf->Resolution->Height; 
    } 
} 
else 
    LogError("GetVideoEncoderConfigurations", soap_faultdetail(&mediaProxy)); 

So manuell keine Soap-Nachrichten erstellen. gSOAP-generierter Code sorgt dafür in der unteren Ebene. Natürlich, es dauert 2 Tage, um Arbeitscode mit wsse Unterstützung zu erzeugen, aber es war wahrscheinlich 10 mal schneller, um es manuell zu machen. Wenn Sie an weiteren Informationen interessiert sind, können Sie mich kontaktieren.

Verwandte Themen