Qt Http Digest Auth - Probleme



  • Hi

    ich versuche gerade mit Qt, dem QNetworkAccessManager eine Http-Digest Auth zu coden...
    hatte es auch mit QNetworkRequest versucht und QAuthenticator habe ich auch schon versucht...
    welche klassen kann bzw. muss ich dafür verwenden?

    ich verstehe nicht was ich genau tun muss um die digest-auth zu erreichen...
    wenn ihr wollt kann ich auch mal meine code-beispiele posten...
    (jedoch habe ich es bis jetzt nur hinbekommen das diese einfach html abfragen und authentifizieren sich nicht...)

    ich bin mir leider auch nicht sicher ob das überhaupt der richtige ansatz ist...
    deshalb wäre ich für jeden hinweis oder tipp dankbar 😃 ...

    es will einfach nicht funktionieren...
    hab schon verschiedene sachen ausprobiert und qt doku gelesen bis zum umfallen...

    kann mir da jemand vll mal einen beispiel codeschnipsel für ne lokale digest-auth schicken?

    lg



  • Ja, zeig mal, was du probiert hast.



  • ok alles klar 🙂

    void MainWindow::on_connect_button_clicked()
    {
        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
        connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
        manager->get(QNetworkRequest(QUrl("...")));
    }
    
    void MainWindow::on_auth_button_clicked(QNetworkReply *reply, QAuthenticator *ator)
    {
        qDebug() << reply->readAll();
        ator->setUser(QString("..."));
        ator->setPassword(QString("..."));
    }
    

    so mit dem qnetworkaccessmanager bekomm ich auch alles hin...
    nur die authentifizierung schaff ich nicht... 🙄

    hier was das ist und wie es geht:
    http://de.wikipedia.org/wiki/HTTP-Authentifizierung

    ich möchte eine digest access auth nach rfc 2716 durchführen...
    hier die rfc:
    https://www.ietf.org/rfc/rfc2716.txt

    gibts dazu vll i.wo nen beispiel code?
    wo man mal sieht wie so etwas funktioniert mit qt?

    gehen tuts laut doku:
    http://doc.qt.io/qt-5/qnetworkaccessmanager.html
    http://doc.qt.io/qt-5/qauthenticator.html#setPassword

    kann ich das überhaupt auf diese weise mit dem qauthenticator machen?



  • sry kann nicht mehr bearbeiten...

    hab oben die falsche rfc angegeben... 🙄

    die richtige ist rfc 2617... :
    http://tools.ietf.org/html/rfc2617



  • Dein SLOT sieht schon richtig aus, aber du musst den auch mit dem authenticationRequired Signal vom connection manager verbinden.



  • Mechanics schrieb:

    Dein SLOT sieht schon richtig aus, aber du musst den auch mit dem authenticationRequired Signal vom connection manager verbinden.

    ok, wie kann ich das machen? 🙂

    ich habs so versucht, aber i.wie kommt meine ausgabe "login" nicht...

    daraus lässt sich ja schließen das er diese nicht ausführt aber warum?
    was mache ich falsch? 😞

    void MainWindow::onAuthenticationRequestSlot( QNetworkReply *reply, QAuthenticator *ator )
    {
        std::cout << "Login..." << std::endl;
        qDebug() << reply->readAll();
        ator->setUser("...");
        ator->setPassword("...");
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    
        connect( manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)) );
    
        connect( manager, SIGNAL(authenticationRequired(QNetworkReply* ,QAuthenticator* )),
                 this,
                 SLOT(onAuthenticationRequestSlot(QNetworkReply* , QAuthenticator*)) );
    
        manager->get(QNetworkRequest( QUrl("...") ));
    }
    


  • Das schaut jetzt soweit richtig aus, ich kann keinen Fehler erkennen.
    Ob die Ausgabe da zuverlässig funktioniert, bin ich mir nicht sicher, ich würd da eher einen Breakpoint setzen, um sicherzugehen.



  • Mechanics schrieb:

    Das schaut jetzt soweit richtig aus, ich kann keinen Fehler erkennen.
    Ob die Ausgabe da zuverlässig funktioniert, bin ich mir nicht sicher, ich würd da eher einen Breakpoint setzen, um sicherzugehen.

    vielen dank für die hilfe erstmal 🙂 ..

    mhh, ich bin aber leider nicht authorisiert...
    es funktioniert leider noch nicht... 😞

    erstes wird die "onAuthenticationRequestSlot"- Funktion nich aufgerufen...!
    (Testausgabe erscheint nicht auch in qDebug() und in einem Status-TextLabel..., auch mit breakpoint 😞 ... )
    und ich bin wenn ich einen zugriff starte auch nicht berechtigt...

    muss ich da vll noch i.wo was angeben das er auch die digest access authorisation nutzt? 😕
    für die basic authorisation setzten die in manchen beispielen die header daten...
    muss ich das auch machen? 😕
    aber soweit ich das verstanden habe übernimmt das doch der qnetworkaccessmanager für mich oder? 😕



  • Ja, wenn ich mich recht erinnere, sollte er das alles selbst übernehmen.
    Ich hätt an deiner Stelle einfach den Qt Code durchdebuggt. Das geht ganz gut, man findet ziemlich schnell die relevanten Stellen. Du solltest schnell eine Stelle finden, wo die HTTP Antwort ausgewertet wird, und was danach passiert oder eben nicht passiert.



  • Mechanics schrieb:

    Ja, wenn ich mich recht erinnere, sollte er das alles selbst übernehmen.
    Ich hätt an deiner Stelle einfach den Qt Code durchdebuggt. Das geht ganz gut, man findet ziemlich schnell die relevanten Stellen. Du solltest schnell eine Stelle finden, wo die HTTP Antwort ausgewertet wird, und was danach passiert oder eben nicht passiert.

    entschuldige bitte für die späte antwort, viel zu tun die letzte zeit.

    hab den traffic - analysiert, um zusehen ob was "raus" geht...
    also alles was zu reduzieren ging, deaktiviert bzw. abgeschaltet...
    dann nach der empfänger ip gefiltert...

    soweit ich das gesehen habe geht eine anfrage raus, aber die authentifizierung nicht...

    woran könnte das liegen?
    evt. wird die 2. connect gar nicht ausgeführt?
    wenn ja woran kann das liegen?

    ok, den qt debugger versuch ich gleich mal...
    danke für den hinweis..



  • httpQuest schrieb:

    soweit ich das gesehen habe geht eine anfrage raus, aber die authentifizierung nicht...

    Zuerst muss eine 401 oder 407 (Proxy Authenticate) Antwort mit einem Digest kommen, irgendwie WWW-Authenticate Digest xyz im Header. Siehst du diese Antwort auf deine Anfrage?


Anmelden zum Antworten