QOAuthHttpServerReplyHandler Class
Gère les redirections de bouclage en mettant en place un serveur HTTP local. Plus d'informations...
| En-tête : | #include <QOAuthHttpServerReplyHandler> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake : | QT += networkauth |
| Hérite : | 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éponse pour les processus d'autorisation OAuth 2.0 qui utilisent la redirection loopback.
L'URI de redirection est l'endroit où le serveur d'autorisation redirige l'agent utilisateur (typiquement, 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 par bouclage utilisent http comme schéma et localhost ou une adresse IP littérale comme hôte (voir IPv4 and IPv6).
QOAuthHttpServerReplyHandler met en place un serveur local. 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 la requête URI de redirection, puis signale l'achèvement de l'autorisation avec a signal.
Pour gérer d'autres schémas d'URI de redirection, voir QOAuthUriSchemeReplyHandler.
Le code suivant illustre l'utilisation. Tout d'abord, les variables nécessaires :
QOAuth2AuthorizationCodeFlow m_oauth; QOAuthHttpServerReplyHandler *m_handler = nullptr;
Ensuite, la configuration d'OAuth (la gestion des erreurs est omise pour des raisons de brièveté) :
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 quelconques (AnyIPv4, AnyIPv6, or Any), le rappel utilisé se présente sous la forme de http://localhost:{port}/{path}. Le gestionnaire tentera d'abord d'écouter l'adresse de bouclage IPv4, puis l'adresse IPv6. localhost est utilisé parce qu'il se résout correctement sur les interfaces IPv4 et IPv6.
Pour les adresses de bouclage (LocalHost or LocalHostIPv6), les littéraux IP (127.0.0.1 et ::1) sont utilisés.
Pour les adresses IP spécifiques, le littéral IP fourni est utilisé directement, par exemple : http://192.168.0.123:{port}/{chemin} dans le cas d'une adresse IPv4.
Il est également possible de spécifier manuellement la partie hôte de l'URL de rappel avec setCallbackHost(). Par exemple, vous pouvez spécifier que l'URL de rappel est localhost.localnet. Naturellement, vous devez vous assurer que cette adresse est accessible après la redirection.
auto replyHandler = new QOAuthHttpServerReplyHandler(QHostAddress::LocalHost, 1337, this); replyHandler->setCallbackHost("localhost.localnet"_L1);
Rappels 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 QSslConfiguration approprié lors de l'appel à listen(). En interne, le gestionnaire utilisera alors QSslServer, et le rappel (URL de redirection) sera de la forme https://{host}:{port}/{path}.
L'exemple suivant illustre cette situation :
// Lecture du certificat et de la clé privéeauto 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éation de la configuration SSLQSslConfiguration configuration = QSslConfiguration::defaultConfiguration() ; configuration.setLocalCertificate(certificates.at(0)) ; configuration.setPrivateKey(privateKey) ;// Instancie le gestionnaire avec la configuration SSLm_handler = new QOAuthHttpServerReplyHandler(1234, this) ; m_handler->listen(configuration) ;
Lorsque cela est possible, il est recommandé d'utiliser d'autres options de redirection URI, voir Choosing A Reply Handler et Qt OAuth2 Browser Support.
Les principaux cas d'utilisation d'un gestionnaire https localhost devraient être limités au temps de développement, ou à des environnements étroitement contrôlés et provisionnés. Par exemple, certains serveurs d'autorisation n'autorisent pas du tout les URI de redirection http, ce qui peut faciliter le développement.
Du point de vue de la sécurité, bien que l'utilisation de SSL/TLS crypte le trafic localhost, OAuth2 a également d'autres mécanismes de sécurité en place tels que PKCE. Vous ne devez en aucun cas distribuer des clés de certificats privés avec l'application.
Note : Les navigateurs émettent des avertissements sévères si le certificat n'est pas fiable. C'est typiquement le cas des certificats auto-signés, dont l'utilisation doit être limitée au temps de développement.
Documentation des fonctions membres
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(QObject *parent = nullptr)
Construit un objet QOAuthHttpServerReplyHandler en utilisant parent comme objet parent. Appelle listen() avec le port 0 et l'adresse LocalHost.
Voir aussi listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)
Construit un objet QOAuthHttpServerReplyHandler en utilisant parent comme objet parent. Appelle listen() avec port et l'adresse LocalHost.
Voir aussi listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)
Construit un objet QOAuthHttpServerReplyHandler en utilisant parent comme objet parent. Appelle listen() avec address et port.
Voir aussi listen().
[virtual noexcept] QOAuthHttpServerReplyHandler::~QOAuthHttpServerReplyHandler()
Détruit l'objet QOAuthHttpServerReplyHandler. Arrête d'écouter les connexions / redirections.
Voir aussi close().
[since 6.9] QString QOAuthHttpServerReplyHandler::callbackHost() const
Renvoie le nom qui est utilisé comme composant hôte du paramètre callback() / OAuth2 redirect_uri.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi setCallbackHost().
QString QOAuthHttpServerReplyHandler::callbackPath() const
Renvoie le chemin utilisé comme composante du paramètre callback() / OAuth2 redirect_uri.
Voir aussi setCallbackPath().
QString QOAuthHttpServerReplyHandler::callbackText() const
Renvoie le texte utilisé en réponse à la redirection à la fin de l'étape d'autorisation.
Le texte est enveloppé dans une simple page HTML et affiché à l'utilisateur par le navigateur / user-agent 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 d'arrêter d'écouter les connexions / redirections.
Voir aussi listen().
bool QOAuthHttpServerReplyHandler::isListening() const
Renvoie true si ce gestionnaire est en train d'écouter, et false sinon.
Voir aussi listen() et close().
bool QOAuthHttpServerReplyHandler::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Indique à ce gestionnaire d'écouter les connexions / redirections entrantes sur address et port. Il renvoie true si l'écoute est réussie, et false dans le cas contraire.
L'écoute active n'est nécessaire que lors de la phase d'autorisation initiale, généralement 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 requesting access tokens ou pour les rafraîchir.
Si cette fonction est appelée avec Null comme address, le gestionnaire tentera d'écouter LocalHost et, en cas d'échec, LocalHostIPv6.
Voir aussi IPv4 and IPv6.
Voir aussi 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 https sur address et port. Retourne true si l'écoute est réussie, et false dans le cas contraire.
Voir HTTP and HTTPS Callbacks pour plus d'informations.
Voir aussi listen(const QHostAddress &, quint16), close(), isListening(), QSslServer, et QTcpServer::listen().
quint16 QOAuthHttpServerReplyHandler::port() const
Renvoie le port sur lequel ce gestionnaire écoute, sinon renvoie 0.
Voir aussi listen() et isListening().
[since 6.9] void QOAuthHttpServerReplyHandler::setCallbackHost(const QString &host)
Définit host comme le composant du nom d'hôte de callback(). Fournir un host non vide remplace le comportement par défaut, voir IPv4 and IPv6.
Cette fonction a été introduite dans Qt 6.9.
Voir aussi callbackHost().
void QOAuthHttpServerReplyHandler::setCallbackPath(const QString &path)
Indique que path doit être utilisé comme chemin d'accès à callback().
Voir aussi callbackPath().
void QOAuthHttpServerReplyHandler::setCallbackText(const QString &text)
Définit text à utiliser en réponse à la redirection à la fin de l'étape d'autorisation.
Voir aussi 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.