QOAuthUriSchemeReplyHandler Class

Behandelt private/angepasste und https URI-Schema-Umleitungen. Mehr...

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

Eigenschaften

Öffentliche Funktionen

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

Signale

Detaillierte Beschreibung

Diese Klasse dient als Antwort-Handler für OAuth 2.0-Autorisierungsprozesse, die private/angepasste oder HTTPS-URI-Schemata für die Umleitung verwenden. Sie verwaltet den Empfang der Autorisierungsumleitung (auch als Callback bekannt) und den anschließenden Erwerb von Zugriffstokens.

Der Umleitungs-URI ist der Ort, an den der Autorisierungsserver den Benutzer-Agenten (normalerweise und vorzugsweise den Systembrowser) umleitet, sobald der Autorisierungsteil des Datenflusses abgeschlossen ist.

Die Verwendung spezifischer URI-Schemata erfordert eine Konfiguration auf der Ebene des Betriebssystems, um den URI der richtigen Anwendung zuzuordnen. Die Art und Weise, wie diese Zuordnung vorgenommen wird, variiert von Betriebssystem zu Betriebssystem. Siehe Platform Support and Dependencies.

Diese Klasse ergänzt QOAuthHttpServerReplyHandler, die http Schemata durch Einrichtung eines localhost-Servers behandelt.

Der folgende Code veranschaulicht die Verwendung. Zuerst die benötigten Variablen:

QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthUriSchemeReplyHandler m_handler;

Gefolgt von der OAuth-Einrichtung (Fehlerbehandlung der Kürze halber weggelassen):

m_oauth.setAuthorizationUrl(QUrl("https://some.authorization.service/v3/authorize"_L1));
m_oauth.setAccessTokenUrl(QUrl("https://some.authorization.service/v3/access_token"_L1));
m_oauth.setClientIdentifier("a_client_id"_L1);
m_oauth.setScope("read"_L1);

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

Schließlich richten wir den URI-Schema-Antwort-Handler ein:

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

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

Private/Benutzerdefinierte URI-Schemata

Benutzerdefinierte URI-Schemata verwenden in der Regel die Reverse-Domain-Notation, gefolgt von einem Pfad, oder gelegentlich Host/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 Umleitungs-URLs reguläre https-Links:

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

Diese Links werden auf iOS als Universal Links und auf Android als App Links bezeichnet.

Die Verwendung von https-Schemata wird empfohlen, da sie zusätzliche Sicherheit bieten, indem sie die Anwendungsentwickler zwingen, den Besitz der verwendeten URLs nachzuweisen. Dieser Nachweis erfolgt durch das Bereitstellen einer Assoziationsdatei, die das Betriebssystem als Teil seiner internen URL-Verteilung konsultiert.

Der Inhalt dieser Datei assoziiert die Anwendung und die verwendeten URLs. Die Assoziationsdateien müssen öffentlich und ohne HTTP-Weiterleitungen zugänglich sein. Außerdem muss die Hosting-Site über gültige Zertifikate verfügen und die Datei muss, zumindest bei Android, als application/json content-type bereitgestellt werden (siehe Konfigurationshandbuch Ihres Servers).

Darüber hinaus können https-Links einige Vorteile für die Benutzerfreundlichkeit bieten:

  • Die https-URL ist gleichzeitig ein normaler https-Link. Wenn der Benutzer die Anwendung nicht installiert hat (da die URL nicht von einer Anwendung verarbeitet wurde), kann der https-Link zum Beispiel Anweisungen zum Installieren der Anwendung enthalten.
  • Der Anwendungsauswahldialog zum Öffnen der URL kann vermieden werden, und stattdessen kann Ihre Anwendung automatisch geöffnet werden.

Der Nachteil ist, dass dies zusätzliche Einstellungen erfordert, da Sie diese öffentlich gehostete Assoziationsdatei einrichten müssen.

Plattformunterstützung und Abhängigkeiten

Die derzeit unterstützten Plattformen sind Android, iOS und macOS.

Das Abhören des URI-Schemas basiert auf QDesktopServices::setUrlHandler() und QDesktopServices::unsetUrlHandler(). Diese werden derzeit vom Qt::Gui-Modul bereitgestellt und daher hängt das QtNetworkAuth -Modul von Qt::Gui ab. Wenn QtNetworkAuth ohne Qt::Gui gebaut wird, wird QOAuthUriSchemeReplyHandler nicht enthalten sein.

Android

Unter Android sind die URI-Schemata erforderlich:

  • Einrichten von intent-filters im Anwendungsmanifest
  • Optional, für die automatische Verifizierung mit https-Schemata, das Hosten einer Site-Association-Datei assetlinks.json

Siehe auch die Qt Android Manifestdatei Konfiguration.

iOS und macOS

Unter iOS und macOS erfordern die URI-Schemata:

Windows, Linux

Derzeit nicht unterstützt.

Eigenschaft Dokumentation

redirectUrl : QUrl

Diese Eigenschaft enthält die URL, die verwendet wird, um die Umleitung/Antwort der Autorisierung zu erhalten.

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

Die URL muss mit der beim Autorisierungsserver registrierten URL übereinstimmen, da die Autorisierungsserver wahrscheinlich alle nicht übereinstimmenden redirect_uris zurückweisen.

Wenn dieser Handler die Umleitung empfängt, muss die Umleitungs-URL mit der hier festgelegten URL übereinstimmen. Der Handler vergleicht das Schema, den Host, den Port, den Pfad und alle Abfrageelemente, die Teil der von dieser Methode festgelegten URL waren.

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

Zugriffsfunktionen:

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

Melder-Signal:

void redirectUrlChanged()

Member Function Dokumentation

QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler()

Konstruiert ein QOAuthUriSchemeReplyHandler-Objekt mit leerem callback()/ redirectUrl() und ohne Elternteil. Das konstruierte Objekt lauscht nicht automatisch.

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

Konstruiert ein QOAuthUriSchemeReplyHandler-Objekt mit parent und leerem callback()/redirectUrl(). Das konstruierte Objekt lauscht nicht automatisch.

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

Konstruiert ein QOAuthUriSchemeReplyHandler-Objekt und setzt parent als übergeordnetes Objekt und redirectUrl als Redirect-URL. Das konstruierte Objekt versucht automatisch, zuzuhören.

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

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

Zerstört 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().

[noexcept] bool QOAuthUriSchemeReplyHandler::isListening() const

Gibt true zurück, wenn dieser Handler gerade lauscht, und 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, und andernfalls false.

Der Handler vergleicht URLs mit redirectUrl(). 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 normalerweise durch einen QOAuth2AuthorizationCodeFlow::grant()-Aufruf eingeleitet wird.

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

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