hemos cámara de red IP que soporta ONVIF protocolo. Cuando traté de obtener su PTZ configuración da Auth error. Estoy implementando esto en C. son los Siguientes petición y la respuesta.

Solicitud:

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

Respuesta:

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

¿Cómo puedo autenticar usuario? Gracias

Q: ¿es usted de la mano de codificación de su JABÓN? P: ¿Cuál es el modelo de la cámara y el fabricante? ¿Son compatibles con una interfaz de la biblioteca? O cualquier specs (además de los WSDL)? Ha intentado ponerse en contacto con ellos (al menos para el código de ejemplo)?
Su una cámara Canon VB-M40. Este método de autenticación es dado en ONVIF programador guía. «onvif.org/Portals/0/documents/WhitePapers/…«

OriginalEl autor Sarfraz Ahmed | 2012-05-29

3 Comentarios

  1. 3

    los comandos que se requiere autenticación. Sus encabezados de autenticación puede ser agregado como este.

     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);
    ¿Cómo se puede generar la contraseña de digerir? Estoy mirando a través de la ONVIF los programadores de la API y se ve como la contraseña de digerir es producida por la realización de Digest = B64ENCODE( SHA1( B64DECODE( Nonce ) + Date + Password ) ) pero tanto la fecha y la contraseña son las cadenas que se han convertido a binario. ¿Qué significa para convertir una cadena a binario? ¿Cómo generar el compendio?
    el nonce_char debe ser codificado en base64? ¿qué es time_char? es la marca de tiempo o de tiempo actual como 2014-01-02T12:47:08Z

    OriginalEl autor Sarfraz Ahmed

  2. 1

    Puede utilizar gSoap con PSES plugin para generar C++ proxy de cliente de OnVif WDSL que usted requiere.

    Hacer que simplifica enormemente mi trabajo. Aquí está un ejemplo de llamada GetVideoEncoderConfiguration y la lectura de la respuesta.

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

    Así que no hay creación manual de los mensajes soap. gSOAP código generado se ocupa de que en la capa inferior. Por supuesto, toma mi 2 días para generar código de trabajo con pses de apoyo, pero aún era probablemente 10 veces más rápido que hacerlo manualmente. Si usted está interesado en recibir más información puede ponerse en contacto conmigo.

    OriginalEl autor DaNY

Dejar respuesta

Please enter your comment!
Please enter your name here