Auf dieser Seite

QOAuthUriSchemeReplyHandler Class

Verarbeitet Weiterleitungen mit privaten/benutzerdefinierten und HTTPS-URI-Schemas. Mehr...

Header: #include <QOAuthUriSchemeReplyHandler>
CMake: find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)
target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth)
qmake: QT += networkauth
Seit: Qt 6.8
Erbt von: QOAuthOobReplyHandler

Eigenschaften

Öffentliche Funktionen

QOAuthUriSchemeReplyHandler()
QOAuthUriSchemeReplyHandler(QObject *parent)
QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr)
virtual ~QOAuthUriSchemeReplyHandler() override
void close()
(since 6.9) bool handleAuthorizationRedirect(const QUrl &url)
bool isListening() const
bool listen()
QUrl redirectUrl() const
void setRedirectUrl(const QUrl &url)

Signale

Ausführliche Beschreibung

Diese Klasse dient als Antwort-Handler für OAuth-2.0 -Autorisierungsvorgänge, die private/benutzerdefinierte oder HTTPS-URI-Schemata für die Weiterleitung verwenden. Sie verwaltet den Empfang der Autorisierungsweiterleitung (auch als Callback bezeichnet) und die anschließende Beschaffung von Zugriffstoken.

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.

Die Verwendung bestimmter URI-Schemata erfordert eine Konfiguration auf Betriebssystemebene, um die URI der richtigen Anwendung zuzuordnen. Die Vorgehensweise zur Einrichtung dieser Zuordnung variiert je nach Betriebssystem. Siehe Platform Support and Dependencies.

Diese Klasse ergänzt QOAuthHttpServerReplyHandler, das „ http “-Schemas durch die Einrichtung eines Localhost-Servers verarbeitet.

Der folgende Code veranschaulicht die Verwendung. Zunächst die benötigten Variablen:

QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthUriSchemeReplyHandler m_handler;

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

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 den URI-Schema-Reply-Handler ein:

m_handler.setRedirectUrl(QUrl{"com.example.myqtapp://oauth2redirect"_L1});
m_oauth.setReplyHandler(&m_handler);

// Initiate the authorization
if (m_handler.listen()) {
    m_oauth.grant();
}

Private/benutzerdefinierte URI-Schemas

Benutzerdefinierte URI-Schemata verwenden in der Regel die Reverse-Domain-Notation, gefolgt von einem Pfad, oder gelegentlich einen Host bzw. Host+Pfad:

// Example with path:
com.example.myapp:/oauth2/callback
// Example with host:
com.example.myapp://oauth2.callback

HTTPS-URI-Schema

Bei HTTPS-URI-Schemata sind die Weiterleitungs-URLs reguläre HTTPS-Links:

https://myapp.example.com/oauth2/callback

Diese Links werden unter iOS als „Universal Links“ und unter Android als „App Links“ bezeichnet.

Die Verwendung von HTTPS-Schemata wird empfohlen, da sie zusätzliche Sicherheit bietet, indem sie Anwendungsentwickler dazu zwingt, die Eigentümerschaft an den verwendeten URLs nachzuweisen. Dieser Nachweis erfolgt durch das Hosten einer Zuordnungsdatei, die das Betriebssystem im Rahmen seiner internen URL-Weiterleitung abfragt.

Der Inhalt dieser Datei ordnet die Anwendung den verwendeten URLs zu. Die Zuordnungsdateien müssen ohne HTTP-Weiterleitungen öffentlich zugänglich sein. Darüber hinaus muss die Hosting-Website über gültige Zertifikate verfügen, und zumindest bei Android muss die Datei mit dem Content-Type „ application/json “ bereitgestellt werden (siehe Konfigurationsanleitung Ihres Servers).

Darüber hinaus können HTTPS-Links einige Vorteile hinsichtlich der Benutzerfreundlichkeit bieten:

  • Die HTTPS-URL fungiert gleichzeitig als regulärer HTTPS-Link. Wenn der Nutzer die App noch nicht installiert hat (da die URL von keiner App verarbeitet wurde), kann der HTTPS-Link beispielsweise Anweisungen dazu bereitstellen.
  • Der Dialog zur Auswahl einer Anwendung zum Öffnen der URL kann vermieden werden, und stattdessen wird Ihre Anwendung möglicherweise automatisch geöffnet

Der Nachteil ist, dass hierfür zusätzliche Konfigurationsschritte erforderlich sind, da Sie diese öffentlich gehostete Zuordnungsdatei einrichten müssen.

Plattformunterstützung und Abhängigkeiten

Derzeit werden die Plattformen Android, iOS und macOS unterstützt.

Das Abhören von URI-Schemata basiert auf QDesktopServices::setUrlHandler() und QDesktopServices::unsetUrlHandler(). Diese werden derzeit vom Modul „Qt GUI“ bereitgestellt, weshalb das Modul „ QtNetworkAuth “ von „Qt GUI“ abhängig ist. Wenn „ QtNetworkAuth “ ohne „Qt GUI“ kompiliert wird, wird „QOAuthUriSchemeReplyHandler“ nicht einbezogen.

Android

Unter Android erfordern die URI-Schemas Folgendes:

  • Einrichtung von „ intent-filters “ im Anwendungsmanifest
  • Optional: Für die automatische Überprüfung bei https-Schemas muss eine Site-Association-Datei bereitgestellt werden assetlinks.json

Siehe auch die Konfiguration der Qt-Android-Manifestdatei.

iOS und macOS

Unter iOS und macOS erfordern die URI-Schemas Folgendes:

Windows, Linux

Derzeit nicht unterstützt. Plattformen und Anwendungsfälle, die Qt WebEngine , können diesen Antwort-Handler dennoch nutzen – siehe „Qt OAuth2 Browser Support“ für weitere Details.

Dokumentation zu den Eigenschaften

redirectUrl : QUrl

Diese Eigenschaft enthält die URL, die zum Empfang der Autorisierungsumleitung bzw. -antwort verwendet wird.

Diese Eigenschaft wird als OAuth2-Parameter „redirect_uri“ verwendet, der als Teil der Autorisierungsanfrage gesendet wird. Die „ redirect_uri “ wird durch Aufruf von ` QUrl::toString()` mit Standardoptionen ermittelt.

Die URL muss mit der beim Autorisierungsserver registrierten übereinstimmen, da die Autorisierungsserver abweichende „redirect_uri“-Werte wahrscheinlich ablehnen.

Ebenso muss, wenn dieser Handler die Weiterleitung empfängt, die Weiterleitungs-URL mit der hier festgelegten URL übereinstimmen. Der Handler vergleicht das Schema, den Host, den Port, den Pfad und alle Abfrageparameter, die Teil der durch diese Methode festgelegten URL waren.

Die URL wird nur verarbeitet, wenn alle diese Elemente übereinstimmen. Der Vergleich der Abfrageparameter schließt zusätzliche Abfrageparameter aus, die möglicherweise serverseitig gesetzt wurden, da diese die eigentlichen Daten enthalten, die von Interesse sind.

Zugriffsfunktionen:

QUrl redirectUrl() const
void setRedirectUrl(const QUrl &url)

Notifier-Signal:

void redirectUrlChanged()

Dokumentation der Mitgliedsfunktionen

QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler()

Erstellt ein `QOAuthUriSchemeReplyHandler`-Objekt mit leeren Werten für ` callback` ()/ ` redirectUrl` () und ohne übergeordnetes Objekt. Das erstellte Objekt hört nicht automatisch ab.

[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(QObject *parent)

Erstellt ein `QOAuthUriSchemeReplyHandler`-Objekt mit ` parent ` und leeren Werten für ` callback()/redirectUrl()`. Das erstellte Objekt ist nicht automatisch im Empfangsmodus.

[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr)

Erstellt ein QOAuthUriSchemeReplyHandler-Objekt und legt parent als übergeordnetes Objekt sowie redirectUrl als Weiterleitungs-URL fest. Das erstellte Objekt versucht automatisch, auf Anfragen zu warten.

Siehe auch redirectUrl(), setRedirectUrl(), listen() und isListening().

[override virtual noexcept] QOAuthUriSchemeReplyHandler::~QOAuthUriSchemeReplyHandler()

Löscht das Objekt „ QOAuthUriSchemeReplyHandler “. Schließt diesen Handler.

Siehe auch close().

void QOAuthUriSchemeReplyHandler::close()

Weist diesen Handler an, nicht mehr auf eingehende URLs zu warten.

Siehe auch „ listen()“ und „ isListening()“.

[since 6.9] bool QOAuthUriSchemeReplyHandler::handleAuthorizationRedirect(const QUrl &url)

Diese Funktion dient dazu, die Weiterleitungs-URL anzugeben, die der Autorisierungsserver am Ende der Autorisierungsphase bereitstellt. Die angegebene URL „ url “ durchläuft denselben URL-Abgleich, wie er unter redirectUrl beschrieben ist.

Die Bereitstellung der URL kann in Szenarien nützlich sein, in denen diese Weiterleitungs-URL auf andere Weise erfasst wird, beispielsweise mit Qt WebEngine oder durch eine andere benutzerdefinierte Lösung. Auf diese Weise kann die Nutzung eines solchen Agenten in den restlichen OAuth2-Ablauf integriert werden.

Dieser Handler muss nicht im Listening-Modus sein; daher wird empfohlen, den Handler mit ` close()` zu rufen, um unnötiges Listening zu vermeiden.

Gibt ` true ` zurück, wenn die URL übereinstimmte und verarbeitet wurde, andernfalls ` false `.

Siehe auch „Redirect-URI-Schemas mit ` Qt WebEngine`“.

Diese Funktion wurde in Qt 6.9 eingeführt.

[noexcept] bool QOAuthUriSchemeReplyHandler::isListening() const

Gibt „ true “ zurück, wenn dieser Handler derzeit auf Verbindungen wartet, andernfalls „ false “.

Siehe auch „ listen()“ und „ close()“.

bool QOAuthUriSchemeReplyHandler::listen()

Weist diesen Handler an, auf eingehende URLs zu warten. Gibt ` true ` zurück, wenn das Abhören erfolgreich war, andernfalls ` false `.

Der Handler gleicht URLs mit redirectUrl() ab. Wenn die empfangene URL nicht übereinstimmt, wird sie an QDesktopServices::openURL() weitergeleitet.

Aktives Abhören ist nur während der anfänglichen Autorisierungsphase erforderlich, die in der Regel durch einen Aufruf von ` QOAuth2AuthorizationCodeFlow::grant()` initiiert wird.

Es wird empfohlen, den Listener nach erfolgreicher Autorisierung zu schließen. Für acquiring access tokens ist kein Abhören erforderlich.

© 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.