2012-05-29 16 views
5

हमारे पास नेटवर्क आईपी कैमरा है जो ONVIF प्रोटोकॉल का समर्थन करता है। जब मैंने अपनी पीटीजेड कॉन्फ़िगरेशन प्राप्त करने का प्रयास किया तो यह एथ त्रुटि देता है। मैं इसे सी में कार्यान्वित कर रहा हूं। अनुरोध और प्रतिक्रिया निम्नलिखित है।ONVIF में उपयोगकर्ता को प्रमाणित कैसे करें?

अनुरोध:

"<?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>" 

प्रतिक्रिया:

<?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> 

मैं कैसे प्रमाणित कर सकते हैं उपयोगकर्ता? धन्यवाद

+0

प्रश्न: क्या आप अपना एसओएपी कोडिंग कर रहे हैं? प्रश्न: कैमरा मॉडल और निर्माता क्या है? क्या वे एक इंटरफ़ेस लाइब्रेरी का समर्थन करते हैं? या कोई चश्मा (डब्लूएसडीएल के अलावा)? क्या आपने उनसे संपर्क करने की कोशिश की है (कम से कम नमूना कोड के लिए)? – paulsm4

+0

इसका एक कैनन कैमरा, वीबी-एम 40। यह प्रमाणीकरण विधि ONVIF प्रोग्रामर मार्गदर्शिका में दी गई है। "http://www.onvif.org/Portals/0/documents/WhitePapers/ONVIF_WG-APG-Aplication_Programmer%27s_Guide.pdf" –

उत्तर

2

उन आदेशों को प्रमाणीकरण की आवश्यकता है। उनके प्रमाणीकरण हेडर इस तरह जोड़ा जा सकता है।

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

में कार्यान्वित करने की आवश्यकता है आप पासवर्ड पाचन कैसे उत्पन्न करते हैं? मैं ओएनवीआईएफ प्रोग्रामर एपीआई देख रहा हूं और ऐसा लगता है कि पासवर्ड डाइजेस्ट का उत्पादन 'डाइजेस्ट = बी 64ENCODE (SHA1 (B64DECODE (Nonce) + दिनांक + पासवर्ड) द्वारा किया जाता है) लेकिन दोनों दिनांक और पासवर्ड स्ट्रिंग हैं जिन्हें परिवर्तित कर दिया गया है द्विआधारी। स्ट्रिंग को बाइनरी में बदलने का क्या अर्थ है? आपने पाचन कैसे बनाया? – CadentOrange

+0

nonce_char base64 एन्कोडेड होना चाहिए? time_char क्या है? क्या यह टाइमस्टैम्प या वर्तमान समय 2014-01-02T12: 47: 08Z है – kashifmehmood

0

यह लिंक मदद कर सकता है:

ONVIF Authentication in .NET 4.0 with Visual Studios 2010

प्र: क्या आप नेट में अपने आवेदन (जो एक ज्यादा सोप के अनुकूल विकास के वातावरण, IMHO) कोडिंग पर विचार करेंगे?

+0

मैंने इसे चेक किया। लेकिन हमें इसे सी –

1

आप WSSE प्लगइन के साथ gSoap का उपयोग ONVIF WDSL कि आप की आवश्यकता से सी ++ ग्राहक प्रॉक्सी उत्पन्न करने के लिए कर सकते हैं।

क्या यह मेरे काम को बहुत सरल बना देता है। GetVideoEncoder कॉन्फ़िगरेशन और पढ़ने की प्रतिक्रिया को कॉल करने का एक उदाहरण यहां दिया गया है।

_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)); 

तो मैन्युअल रूप से साबुन संदेश नहीं बनाते हैं। जीएसओएपी जेनरेट कोड कम परत में इसका ख्याल रखता है। बेशक, wsse समर्थन के साथ वर्किंग कोड उत्पन्न करने में 2 दिन लगते हैं, लेकिन फिर भी यह मैन्युअल रूप से करने के लिए शायद 10 गुना तेज था। यदि आप और जानकारी में रूचि रखते हैं तो आप मुझसे संपर्क कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे