QOAuthHttpServerReplyHandler Class
Behandelt Loopback-Weiterleitungen durch die Einrichtung eines lokalen HTTP-Servers. Mehr...
| Header: | #include <QOAuthHttpServerReplyHandler> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth) target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake: | QT += networkauth |
| Erbt von: | QOAuthOobReplyHandler |
Öffentliche Funktionen
| QOAuthHttpServerReplyHandler(QObject *parent = nullptr) | |
| QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr) | |
| QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr) | |
| virtual | ~QOAuthHttpServerReplyHandler() |
(since 6.9) QString | callbackHost() const |
| QString | callbackPath() const |
| QString | callbackText() const |
| void | close() |
| bool | isListening() const |
| bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
| bool | listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
| quint16 | port() const |
(since 6.9) void | setCallbackHost(const QString &host) |
| void | setCallbackPath(const QString &path) |
| void | setCallbackText(const QString &text) |
Ausführliche Beschreibung
Diese Klasse dient als Antwort-Handler für OAuth 2.0 -Autorisierungsvorgänge, die eine Loopback-Weiterleitung verwenden.
Die Umleitungs-URI ist die Adresse, an die der Autorisierungsserver den User-Agent (in der Regel und vorzugsweise den Systembrowser) umleitet, sobald der Autorisierungsteil des Ablaufs abgeschlossen ist. Loopback-Umleitungs-URIs verwenden http als Schema und entweder „localhost“ oder eine IP-Adresskonstante als Host (siehe IPv4 and IPv6).
QOAuthHttpServerReplyHandler richtet einen Localhost-Server ein. Sobald der Autorisierungsserver den Browser an diese Localhost-Adresse weiterleitet, analysiert der Antwort-Handler die Abfrageparameter der Weiterleitungs-URI und signalisiert anschließend den Abschluss der Autorisierung mit a signal.
Informationen zur Behandlung anderer Umleitungs-URI-Schemas finden Sie unter QOAuthUriSchemeReplyHandler.
Der folgende Code veranschaulicht die Verwendung. Zunächst die erforderlichen Variablen:
QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthHttpServerReplyHandler *m_handler = nullptr;Anschließend folgt die OAuth-Konfiguration (die Fehlerbehandlung wurde der Kürze halber weggelassen):
m_oauth.setAuthorizationUrl(QUrl(authorizationUrl));
m_oauth.setTokenUrl(QUrl(accessTokenUrl));
m_oauth.setClientIdentifier(clientIdentifier);
m_oauth.setRequestedScopeTokens({scope});
m_handler = new QOAuthHttpServerReplyHandler(1234, this);
connect(&m_oauth, &QAbstractOAuth::authorizeWithBrowser, this, &QDesktopServices::openUrl);
connect(&m_oauth, &QAbstractOAuth::granted, this, [this]() {
// Here we use QNetworkRequestFactory to store the access token
m_api.setBearerToken(m_oauth.token().toLatin1());
m_handler->close();
});Abschließend richten wir dann das URI-Schema „reply-handler“ ein:
m_oauth.setReplyHandler(m_handler);
// Initiate the authorization
if (m_handler->isListening()) {
m_oauth.grant();
}IPv4 und IPv6
Wenn es sich bei dem Handler um einen „Any-Address“-Handler (AnyIPv4, AnyIPv6, or Any) handelt, hat der verwendete Callback die Form http://localhost:{port}/{path}. Der Handler versucht zunächst, auf der IPv4-Loopback-Adresse zu lauschen, und anschließend auf IPv6. localhost wird verwendet, da diese Adresse sowohl auf IPv4- als auch auf IPv6-Schnittstellen korrekt aufgelöst wird.
Für Loopback-Adressen (LocalHost or LocalHostIPv6) werden die IP-Literale (127.0.0.1 und ::1) verwendet.
Bei bestimmten IP-Adressen wird das angegebene IP-Literal direkt verwendet, zum Beispiel: http://192.168.0.123:{port}/{path} im Falle einer IPv4-Adresse.
Es ist auch möglich, den Host-Teil der Callback-URL manuell mit ` setCallbackHost()` anzugeben. So können Sie beispielsweise den Callback als ` localhost.localnet` festlegen. Selbstverständlich müssen Sie sicherstellen, dass diese Adresse bei der Weiterleitung erreichbar ist.
auto replyHandler = new QOAuthHttpServerReplyHandler(QHostAddress::LocalHost, 1337, this);
replyHandler->setCallbackHost("localhost.localnet"_L1);HTTP- und HTTPS-Callbacks
Seit Qt 6.9 ist es möglich, den Handler so zu konfigurieren, dass er das URI-Schema https anstelle von http verwendet. Dies geschieht durch die Angabe eines entsprechenden QSslConfiguration beim Aufruf von listen(). Intern verwendet der Handler dann QSslServer, und der Callback (Weiterleitungs-URL) hat die Form https://{host}:{port}/{path}.
Das folgende Beispiel veranschaulicht dies:
// Zertifikat und privaten Schlüssel einlesen
auto certificates = QSslCertificate::fromPath(sslCertificateFile);
QFile keyFile(sslPrivateKeyFile);
if (!keyFile.open(QFile::ReadOnly)) {
qWarning("Cannot open key file");
return;
}
QSslKey privateKey(&keyFile, QSsl::Rsa, QSsl::Pem);
if (certificates.size()== 0|| privateKey.isNull()) {
qWarning("SSL certificate data invalid");
return;
}
// SSL-Konfiguration erstellen
QSslConfiguration configuration = QSslConfiguration::defaultConfiguration();
configuration.setLocalCertificate(certificates.at(0));
configuration.setPrivateKey(privateKey);
// Handler mit der SSL-Konfiguration instanziieren
m_handler = new QOAuthHttpServerReplyHandler(1234, this);
m_handler->listen(configuration);Wenn möglich, wird empfohlen, andere Redirect-URI-Optionen zu verwenden, siehe „Auswahl eines Antwort-Handlers “ und „Qt-OAuth2-Browser-Unterstützung“.
Die primären Anwendungsfälle für einen „localhost https “-Handler sollten auf die Entwicklungsphase oder streng kontrollierte und bereitgestellte Umgebungen beschränkt sein. Beispielsweise lassen einige Autorisierungsserver „plain http “-Redirect-URIs überhaupt nicht zu; in diesem Fall kann dies den Entwicklungsaufwand verringern.
Aus Sicherheitssicht wird der Localhost-Datenverkehr zwar durch die Verwendung von SSL/TLS verschlüsselt, OAuth2 verfügt jedoch auch über weitere Sicherheitsmechanismen wie „ PKCE “. Unter keinen Umständen sollten Sie private Zertifikatsschlüssel zusammen mit der Anwendung verbreiten.
Hinweis: Browser geben ernste Warnungen aus, wenn das Zertifikat nicht als vertrauenswürdig eingestuft wird. Dies ist typisch für selbstsignierte Zertifikate, deren Verwendung auf die Entwicklungsphase beschränkt bleiben sollte.
Dokumentation zu Mitgliedsfunktionen
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(QObject *parent = nullptr)
Erstellt ein `QOAuthHttpServerReplyHandler`-Objekt unter Verwendung von ` parent ` als übergeordnetem Objekt. Ruft ` listen()` mit dem Port ` 0 ` und der Adresse ` LocalHost` auf.
Siehe auch listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)
Erstellt ein `QOAuthHttpServerReplyHandler`-Objekt unter Verwendung von ` parent ` als übergeordnetem Objekt. Ruft ` listen()` mit ` port ` und der Adresse ` LocalHost` auf.
Siehe auch listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)
Erstellt ein `QOAuthHttpServerReplyHandler`-Objekt unter Verwendung von ` parent ` als übergeordnetes Objekt. Ruft ` listen()` mit ` address ` und ` port` auf.
Siehe auch listen().
[virtual noexcept] QOAuthHttpServerReplyHandler::~QOAuthHttpServerReplyHandler()
Löscht das Objekt „ QOAuthHttpServerReplyHandler “. Beendet das Abhören auf Verbindungen bzw. Umleitungen.
Siehe auch close().
[since 6.9] QString QOAuthHttpServerReplyHandler::callbackHost() const
Gibt den Namen zurück, der als Host-Komponente des Parameters „redirect_uri“ bei „ callback()“ bzw. OAuth2 verwendet wird.
Diese Funktion wurde in Qt 6.9 eingeführt.
Siehe auch ` setCallbackHost()`.
QString QOAuthHttpServerReplyHandler::callbackPath() const
Gibt den Pfad zurück, der als Pfadkomponente des Parameters „ callback()“ bzw. „redirect_uri“ bei OAuth2 verwendet wird.
Siehe auch ` setCallbackPath()`.
QString QOAuthHttpServerReplyHandler::callbackText() const
Gibt den Text zurück, der als Antwort auf die Weiterleitung am Ende der Autorisierungsphase verwendet wird.
Der Text ist in eine einfache HTML-Seite eingebettet und wird dem Benutzer von dem Browser bzw. User-Agent angezeigt, der die Weiterleitung durchgeführt hat.
Der Standardtext lautet
Callback received. Feel free to close this page.Siehe auch ` setCallbackText()`.
void QOAuthHttpServerReplyHandler::close()
Weist diesen Handler an, das Abhören auf Verbindungen bzw. Umleitungen zu beenden.
Siehe auch ` listen()`.
bool QOAuthHttpServerReplyHandler::isListening() const
Gibt „ true “ zurück, wenn dieser Handler derzeit auf Verbindungen wartet, andernfalls „ false “.
Siehe auch listen() und close().
bool QOAuthHttpServerReplyHandler::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Weist diesen Handler an, auf eingehende Verbindungen bzw. Umleitungen unter address und port zu warten. Gibt „ true “ zurück, wenn das Abhören erfolgreich war, andernfalls „ false “.
Das aktive Abhören ist nur während der anfänglichen Autorisierungsphase erforderlich, die in der Regel durch einen Aufruf von QOAuth2AuthorizationCodeFlow::grant() ausgelöst wird.
Es wird empfohlen, den Listener nach erfolgreicher Autorisierung zu schließen. Für „ requesting access tokens “ oder deren Aktualisierung ist kein Abhören erforderlich.
Wird diese Funktion mit ` Null ` als ` address` aufgerufen, versucht der Handler, auf ` LocalHost` zu hören; sollte dies fehlschlagen, auf ` LocalHostIPv6`.
Siehe auch IPv4 and IPv6.
Siehe auch close(), isListening() und QTcpServer::listen().
bool QOAuthHttpServerReplyHandler::listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Weist diesen Handler an, auf eingehende https -Verbindungen bzw. Weiterleitungen unter address und port zu warten. Gibt true zurück, wenn das Abhören erfolgreich war, andernfalls false.
Weitere Informationen finden Sie unter HTTP and HTTPS Callbacks.
Siehe auch listen(const QHostAddress &, quint16), close(), isListening(), QSslServer und QTcpServer::listen().
quint16 QOAuthHttpServerReplyHandler::port() const
Gibt den Port zurück, auf dem dieser Handler auf Verbindungen wartet; andernfalls wird 0 zurückgegeben.
Siehe auch listen() und isListening().
[since 6.9] void QOAuthHttpServerReplyHandler::setCallbackHost(const QString &host)
Legt „ host “ als Hostnamenkomponente von „ callback()“ fest. Durch die Angabe eines nicht leeren „ host “ wird das Standardverhalten überschrieben, siehe IPv4 and IPv6.
Diese Funktion wurde in Qt 6.9 eingeführt.
Siehe auch callbackHost().
void QOAuthHttpServerReplyHandler::setCallbackPath(const QString &path)
Legt „ path “ als Pfadkomponente der Funktion „ callback()“ fest.
Siehe auch „ callbackPath()“.
void QOAuthHttpServerReplyHandler::setCallbackText(const QString &text)
Legt „ text “ fest, das als Reaktion auf die Weiterleitung am Ende der Autorisierungsphase verwendet werden soll.
Siehe auch callbackText().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.