Sur cette page

QOAuthUriSchemeReplyHandler Class

Gère les redirections d'URI privées/personnelles et https. Plus d'informations...

En-tête : #include <QOAuthUriSchemeReplyHandler>
CMake : find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)
target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth)
qmake : QT += networkauth
Depuis : Qt 6.8
Hérite : QOAuthOobReplyHandler

Propriétés

Fonctions publiques

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)

Signaux

Description détaillée

Cette classe sert de gestionnaire de réponse pour les processus d'autorisation OAuth 2.0 qui utilisent des schémas URI privés/personnalisés ou HTTPS pour la redirection. Elle gère la réception de la redirection d'autorisation (également connue sous le nom de rappel) et l'acquisition ultérieure des jetons d'accès.

L'URI de redirection est l'endroit où le serveur d'autorisation redirige l'agent utilisateur (généralement, et de préférence, le navigateur du système) une fois que la partie autorisation du flux est terminée.

L'utilisation de schémas d'URI spécifiques nécessite une configuration au niveau du système d'exploitation afin d'associer l'URI à l'application correcte. La manière de configurer cette association varie d'un système d'exploitation à l'autre. Voir Platform Support and Dependencies.

Cette classe complète QOAuthHttpServerReplyHandler, qui gère les schémas http en mettant en place un serveur local.

Le code suivant illustre l'utilisation de la classe. Tout d'abord, les variables nécessaires :

QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthUriSchemeReplyHandler m_handler;

Ensuite, la configuration d'OAuth (la gestion des erreurs est omise par souci de concision) :

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

Enfin, nous configurons le gestionnaire de réponse du schéma URI :

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

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

Schémas d'URI privés/personnalisés

Les schémas d'URI personnalisés utilisent généralement la notation du domaine inversé suivie d'un chemin, ou occasionnellement d'un hôte/hôte+chemin :

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

Schéma d'URI HTTPS

Avec les URI HTTPS, les URL de redirection sont des liens https normaux :

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

Ces liens sont appelés liens universels sur iOS et liens d'application sur Android.

L'utilisation de schémas https est recommandée car elle offre une sécurité supplémentaire en obligeant les développeurs d'applications à prouver qu'ils sont propriétaires des URL utilisées. Cette preuve est apportée en hébergeant un fichier d'association, que le système d'exploitation consultera dans le cadre de sa distribution interne d'URL.

Le contenu de ce fichier associe l'application et les URL utilisés. Les fichiers d'association doivent être accessibles publiquement sans redirection HTTP. De plus, le site d'hébergement doit disposer de certificats valides et, au moins avec Android, le fichier doit être servi en tant que application/json content-type (voir le guide de configuration de votre serveur).

En outre, les liens https peuvent offrir certains avantages en termes d'utilisation :

  • L'URL https se double d'un lien https normal. Si l'utilisateur n'a pas installé l'application (puisque l'URL n'a pas été traitée par une application), le lien https peut par exemple fournir des instructions pour le faire.
  • Le dialogue de sélection de l'application pour ouvrir l'URL peut être évité, et votre application peut être ouverte automatiquement à la place

La contrepartie est que cela nécessite une configuration supplémentaire puisque vous devez mettre en place ce fichier d'association hébergé publiquement.

Plateformes supportées et dépendances

Les plateformes actuellement prises en charge sont Android, iOS et macOS.

L'écoute du schéma URI est basée sur QDesktopServices::setUrlHandler() et QDesktopServices::unsetUrlHandler(). Ceux-ci sont actuellement fournis par le module Qt::Gui et, par conséquent, le module QtNetworkAuth dépend de Qt::Gui. Si QtNetworkAuth est construit sans Qt::Gui, QOAuthUriSchemeReplyHandler ne sera pas inclus.

Android

Sur Android, les schémas d'URI requièrent l'utilisation du module QOAuthUriSchemeReplyHandler :

  • Configurer intent-filters dans le manifeste de l'application
  • Optionnellement, pour la vérification automatique avec les schémas https, l'hébergement d'un fichier d'association de site. assetlinks.json

Voir aussi la configuration du fichier manifeste de Qt Android.

iOS et macOS

Sur iOS et macOS, les schémas URI nécessitent :

Windows, Linux

Non pris en charge actuellement. Cependant, les plateformes et les cas d'utilisation qui supportent Qt WebEngine peuvent toujours utiliser ce gestionnaire de réponse - voir Qt OAuth2 Browser Support pour plus de détails.

Documentation sur les propriétés

redirectUrl : QUrl

Cette propriété contient l'URL utilisée pour recevoir la redirection/réponse d'autorisation.

Cette propriété est utilisée comme paramètre OAuth2 redirect_uri, qui est envoyé dans le cadre de la demande d'autorisation. L'adresse redirect_uri est obtenue en appelant QUrl::toString() avec les options par défaut.

L'URL doit correspondre à celle enregistrée sur le serveur d'autorisation, car les serveurs d'autorisation rejetteront probablement tout redirect_uris qui ne correspond pas.

De même, lorsque ce gestionnaire reçoit la redirection, l'URL de redirection doit correspondre à l'URL définie ici. Le gestionnaire compare le schéma, l'hôte, le port, le chemin et tous les éléments de la requête qui faisaient partie de l'URL définie par cette méthode.

L'URL n'est traitée que si tous ces éléments correspondent. La comparaison des paramètres de requête exclut tous les paramètres de requête supplémentaires qui peuvent avoir été définis côté serveur, car ce sont eux qui contiennent les données d'intérêt.

Fonctions d'accès :

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

Signal du notificateur :

void redirectUrlChanged()

Documentation des fonctions membres

QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler()

Construit un objet QOAuthUriSchemeReplyHandler avec callback()/ redirectUrl() vide et sans parent. L'objet construit n'écoute pas automatiquement.

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

Construit un objet QOAuthUriSchemeReplyHandler avec parent et callback()/redirectUrl() vides. L'objet construit n'écoute pas automatiquement.

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

Construit un objet QOAuthUriSchemeReplyHandler et définit parent comme objet parent et redirectUrl comme URL de redirection. L'objet construit tente automatiquement d'écouter.

Voir aussi redirectUrl(), setRedirectUrl(), listen() et isListening().

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

Détruit l'objet QOAuthUriSchemeReplyHandler. Ferme ce gestionnaire.

Voir aussi close().

void QOAuthUriSchemeReplyHandler::close()

Indique à ce gestionnaire d'arrêter d'écouter les URL entrantes.

Voir aussi listen() et isListening().

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

Cette fonction est utilisée pour fournir l'URL de redirection que le serveur d'autorisation fournit à la fin de l'étape d'autorisation. L'URL fournie ( url ) est soumise à la même correspondance d'URL que celle décrite à l'adresse redirectUrl.

La fourniture de l'URL peut être utile dans les scénarios où l'URL de redirection est capturée par d'autres moyens, par exemple à l'aide de Qt WebEngine ou par le biais d'un autre arrangement personnalisé. De cette manière, l'utilisation d'un tel agent peut être intégrée au reste du flux OAuth2.

Ce gestionnaire n'a pas besoin d'être à l'écoute, et il est donc recommandé d'utiliser close() pour éviter toute écoute inutile.

Retourne true si l'URL correspond et a été traitée, false sinon.

Voir aussi Redirect URI Schemes avec Qt WebEngine.

Cette fonction a été introduite dans Qt 6.9.

[noexcept] bool QOAuthUriSchemeReplyHandler::isListening() const

Renvoie true si ce gestionnaire est en train d'écouter, et false sinon.

Voir aussi listen() et close().

bool QOAuthUriSchemeReplyHandler::listen()

Indique à ce gestionnaire d'écouter les URL entrantes. Il renvoie true si l'écoute est réussie, et false dans le cas contraire.

Le gestionnaire fera correspondre les URL à redirectUrl(). Si l'URL reçue ne correspond pas, elle sera transmise à QDesktopServices::openURL().

L'écoute active n'est nécessaire que lors de la phase d'autorisation initiale, typiquement initiée par un appel à QOAuth2AuthorizationCodeFlow::grant().

Il est recommandé de fermer l'écouteur après une autorisation réussie. L'écoute n'est pas nécessaire pour acquiring access tokens.

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