Sur cette page

QOAuthHttpServerReplyHandler Class

Gère les redirections en boucle en mettant en place un serveur HTTP local. En savoir plus...

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

Fonctions publiques

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)

Description détaillée

Cette classe sert de gestionnaire de réponses pour les processus d'autorisation OAuth 2.0 qui utilisent la redirection en boucle.

L'URI de redirection est l'adresse vers laquelle 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. Les URI de redirection en boucle utilisent http comme schéma et soit localhost, soit une adresse IP littérale comme hôte (voir IPv4 and IPv6).

QOAuthHttpServerReplyHandler configure un serveur « localhost ». Une fois que le serveur d’autorisation a redirigé le navigateur vers cette adresse « localhost », le gestionnaire de réponse analyse les paramètres de requête de l’URI de redirection, puis signale la fin de l’autorisation avec a signal.

Pour gérer d’autres schémas d’URI de redirection, consultez QOAuthUriSchemeReplyHandler.

Le code suivant illustre son utilisation. Tout d’abord, les variables nécessaires :

QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthHttpServerReplyHandler *m_handler = nullptr;

Puis la configuration OAuth (la gestion des erreurs a été omise par souci de concision) :

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

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

m_oauth.setReplyHandler(m_handler);

// Initiate the authorization
if (m_handler->isListening()) {
    m_oauth.grant();
}

IPv4 et IPv6

Si le gestionnaire est un gestionnaire d'adresses génériques (AnyIPv4, AnyIPv6, or Any), la fonction de rappel utilisée se présente sous la forme http://localhost:{port}/{path}. Le gestionnaire tentera d'abord d'écouter sur l'adresse de bouclage IPv4, puis sur IPv6. localhost est utilisé car il se résout correctement sur les interfaces IPv4 et IPv6.

Pour les adresses de bouclage (LocalHost or LocalHostIPv6), on utilise les littéraux IP (127.0.0.1 et ::1).

Pour les adresses IP spécifiques, l’adresse IP littérale fournie est utilisée directement, par exemple : http://192.168.0.123:{port}/{path} dans le cas d’une adresse IPv4.

Il est également possible de spécifier manuellement la partie « hôte » de l’URL de rappel à l’aide de ` setCallbackHost()`. Par exemple, vous pouvez spécifier que l’URL de rappel soit ` localhost.localnet`. Bien entendu, vous devez vous assurer que cette adresse est accessible lors de la redirection.

auto replyHandler = new QOAuthHttpServerReplyHandler(QHostAddress::LocalHost, 1337, this);
replyHandler->setCallbackHost("localhost.localnet"_L1);

Callbacks HTTP et HTTPS

Depuis Qt 6.9, il est possible de configurer le gestionnaire pour qu’il utilise le schéma URI https au lieu de http. Pour ce faire, il suffit de fournir un paramètre QSslConfiguration approprié lors de l’appel de la fonction listen(). En interne, le gestionnaire utilisera alors QSslServer, et la fonction de rappel (URL de redirection) prendra la forme https://{host}:{port}/{path}.

L'exemple suivant illustre ce principe :

// Lecture du certificat et de la clé privée
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;
}

// Créer une configuration SSL
QSslConfiguration configuration = QSslConfiguration::defaultConfiguration();
configuration.setLocalCertificate(certificates.at(0));
configuration.setPrivateKey(privateKey);

// Instancier le gestionnaire avec la configuration SSL
m_handler = new QOAuthHttpServerReplyHandler(1234, this);
m_handler->listen(configuration);

Dans la mesure du possible, il est recommandé d'utiliser d'autres options d'URI de redirection ; voir « Choix d'un gestionnaire de réponse » et « Prise en charge de Qt OAuth2 par les navigateurs ».

Les principaux cas d’utilisation d’un gestionnaire « localhost https » doivent se limiter à la phase de développement ou à des environnements étroitement contrôlés et provisionnés. Par exemple, certains serveurs d’autorisation n’autorisent absolument pas les URI de redirection de type « http », auquel cas cette solution peut faciliter le développement.

Du point de vue de la sécurité, bien que l’utilisation de SSL/TLS permette de chiffrer le trafic sur localhost, OAuth2 dispose également d’autres mécanismes de sécurité, tels que PKCE. Vous ne devez en aucun cas distribuer des clés de certificat privées avec l’application.

Remarque : les navigateurs afficheront des avertissements sévères si le certificat n’est pas considéré comme fiable. C’est généralement le cas avec les certificats auto-signés, dont l’utilisation doit être limitée à la phase de développement.

Documentation des fonctions membres

[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(QObject *parent = nullptr)

Crée un objet `QOAuthHttpServerReplyHandler` en utilisant ` parent ` comme objet parent. Appelle la méthode ` listen()` avec le port ` 0 ` et l'adresse ` LocalHost`.

Voir également listen().

[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)

Crée un objet `QOAuthHttpServerReplyHandler` en utilisant ` parent ` comme objet parent. Appelle la méthode ` listen()` avec les paramètres ` port ` et l'adresse ` LocalHost`.

Voir également listen().

[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)

Crée un objet `QOAuthHttpServerReplyHandler` en utilisant ` parent ` comme objet parent. Appelle la méthode ` listen()` avec les paramètres ` address ` et ` port`.

Voir également listen().

[virtual noexcept] QOAuthHttpServerReplyHandler::~QOAuthHttpServerReplyHandler()

Supprime l'objet ` QOAuthHttpServerReplyHandler `. Arrête l'écoute des connexions et des redirections.

Voir aussi close().

[since 6.9] QString QOAuthHttpServerReplyHandler::callbackHost() const

Renvoie le nom utilisé comme composant hôte du paramètre` callback()` / ` redirect_uri` d'OAuth2.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi setCallbackHost().

QString QOAuthHttpServerReplyHandler::callbackPath() const

Renvoie le chemin utilisé comme composant « path » du paramètre` callback()` / ` redirect_uri` de l'OAuth2.

Voir également setCallbackPath().

QString QOAuthHttpServerReplyHandler::callbackText() const

Renvoie le texte utilisé dans la réponse à la redirection à la fin de la phase d'autorisation.

Ce texte est intégré dans une page HTML simple et affiché à l'utilisateur par le navigateur ou l'agent utilisateur qui a effectué la redirection.

Le texte par défaut est

Callback received. Feel free to close this page.

Voir aussi setCallbackText().

void QOAuthHttpServerReplyHandler::close()

Indique à ce gestionnaire de cesser d'écouter les connexions / redirections.

Voir également listen().

bool QOAuthHttpServerReplyHandler::isListening() const

Renvoie ` true ` si ce gestionnaire est actuellement à l'écoute, et ` false ` dans le cas contraire.

Voir également listen() et close().

bool QOAuthHttpServerReplyHandler::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

Indique à ce gestionnaire d'écouter les connexions entrantes et les redirections sur address et port. Renvoie true si l'écoute est réussie, et false dans le cas contraire.

L'écoute active n'est requise que lors de la phase d'autorisation initiale, généralement lancée par un appel à QOAuth2AuthorizationCodeFlow::grant().

Il est recommandé de fermer l'écouteur une fois l'autorisation réussie. L'écoute n'est pas nécessaire pour les requesting access tokens ni pour leur actualisation.

Si cette fonction est appelée avec Null comme address, le gestionnaire tentera d’écouter sur LocalHost, et en cas d’échec, sur LocalHostIPv6.

Voir également IPv4 and IPv6.

Voir également close(), isListening() et QTcpServer::listen().

bool QOAuthHttpServerReplyHandler::listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0)

Indique à ce gestionnaire d’écouter les connexions / redirections entrantes via le protocole https sur address et port. Renvoie true si l’écoute a abouti, et false dans le cas contraire.

Voir HTTP and HTTPS Callbacks pour plus d’informations.

Voir également listen(const QHostAddress &, quint16), close(), isListening(), QSslServer et QTcpServer::listen().

quint16 QOAuthHttpServerReplyHandler::port() const

Renvoie le port sur lequel ce gestionnaire est à l'écoute ; sinon, renvoie 0.

Voir également listen() et isListening().

[since 6.9] void QOAuthHttpServerReplyHandler::setCallbackHost(const QString &host)

Définit ` host ` comme composant du nom d'hôte de la fonction ` callback()`. La spécification d'un paramètre ` host ` non vide remplace le comportement par défaut ; voir IPv4 and IPv6.

Cette fonction a été introduite dans Qt 6.9.

Voir également callbackHost().

void QOAuthHttpServerReplyHandler::setCallbackPath(const QString &path)

Définit ` path ` comme composant du chemin d'accès de la fonction ` callback()`.

Voir également callbackPath().

void QOAuthHttpServerReplyHandler::setCallbackText(const QString &text)

Définit la variable ` text ` qui sera utilisée lors de la redirection à la fin de la phase d'autorisation.

Voir également 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.