繁体   English   中英

C++ 使用 Qt 进行摘要认证

[英]C++ digest authentication with Qt

我想问一个关于 c++ rest 库的问题。 在这里,我想用c++代码编写一个摘要认证。 我正在使用 Qt 库。 为了进行摘要认证,我需要从 header 中获取 nonce 令牌。 我正在尝试用我的代码读取响应 header 。 下面的代码可以正常工作以获得响应,但“manager->head”不起作用。 你能帮我吗,我怎样才能读取 header,这样我才能得到 nonce 令牌。

QNetworkRequest request1;
request1.setUrl(QUrl("http://172.16.101.68/reset")); 
QNetworkAccessManager* manager = new QNetworkAccessManager();
QNetworkReply*reply = manager->get(request1);
//QNetworkReply*reply = manager->head(request1); this is not working
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();

QByteArray data1 = reply->readAll();
QString dataReply(data1);


Thanks, 

我已经以这种方式解决了问题;
我更喜欢以经典方式编写摘要认证。 摘要认证有两个步骤。 这些是接收随机数和发送用户名+密码+随机数组合。 下面的代码是c++ QnetworkAccessManager中发送密码、用户名、nonce的部分。

 digestResponse = "Digest username=\"" + _userName  + "\"" + ", realm=\"" + _realm + 
    "\"" + ", nonce=\"" + _nonce + "\""
                   + ", uri=\"" + urlAfterIp +"\"" + ", algorithm=MD5" + ", response=" 
  + "\"" + ha3  +"\"" + ", qop=" + _qop + ", nc="
                   + _ncString + ", cnonce=\"" +_cnonce + "\"";


    //setting the variables.............

  QEventLoop loop;

  QNetworkAccessManager* manager = new QNetworkAccessManager();
  QNetworkRequest networkRequest;
  networkRequest.setUrl(QUrl("http://172.16.101.68/reset"));

  networkRequest.setRawHeader("Authorization", digestResponse.c_str());
  QObject *a = new QObject();
  QNetworkReply *reply = manager->get(networkRequest);

  QObject::connect(reply, SIGNAL(readyRead()),
          a, SLOT(slotReadyRead()));
  QObject::connect(reply, SIGNAL(finished()),
          a, SLOT(slotOnRequestCompleted()));
  QObject::connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
          a, SLOT(slotOnRequestError(QNetworkReply::NetworkError)));
  QObject::connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
          a, SLOT(slotSslErrors(QList<QSslError>)));

  QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));


  loop.exec();

  QByteArray dataReceived = reply->readAll();
  QString dataReply(dataReceived);    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM