QOAuthUriSchemeReplyHandler Class
Gère les redirections des schémas URI « private », « custom » et « https ». En savoir plus...
| 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 de : | QOAuthOobReplyHandler |
Propriétés
- redirectUrl : QUrl
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
| void | redirectUrlChanged() |
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 d’URI privés/personnalisés ou HTTPS pour la redirection. Elle gère la réception de la redirection d’autorisation (également appelée « callback ») et l’acquisition subséquente des jetons d’accès.
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.
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 appropriée. La procédure de configuration de cette association varie selon les systèmes d'exploitation. Voir Platform Support and Dependencies.
Cette classe complète QOAuthHttpServerReplyHandler, qui gère les schémas http en configurant un serveur localhost.
Le code suivant illustre son utilisation. Tout d’abord, les variables nécessaires :
QOAuth2AuthorizationCodeFlow m_oauth;
QOAuthUriSchemeReplyHandler m_handler;Puis la configuration 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 URI personnalisés utilisent généralement la notation de domaine inversé suivie d’un chemin d’accès, ou parfois d’un hôte/hôte+chemin d’accès :
// Example with path:
com.example.myapp:/oauth2/callback
// Example with host:
com.example.myapp://oauth2.callbackSchéma d'URI HTTPS
Avec les schémas URI HTTPS, les URL de redirection sont des liens https classiques :
https://myapp.example.com/oauth2/callbackCes liens sont appelés « Universal Links » sur iOS et « App Links » sur Android.
L'utilisation des 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 bien les propriétaires des URL utilisées. Cette preuve s'effectue via l'hébergement d'un fichier d'association, que le système d'exploitation consultera dans le cadre de son traitement interne des URL.
Le contenu de ce fichier associe l’application aux URL utilisées. Les fichiers d’association doivent être accessibles au public sans aucune redirection HTTP. De plus, le site d’hébergement doit disposer de certificats valides et, au moins sur Android, le fichier doit être servi avec le type de contenu « application/json » (reportez-vous au guide de configuration de votre serveur).
Par ailleurs, les liens https peuvent offrir certains avantages en termes d’ergonomie :
- L’URL https fait également office de lien https classique. Si l’utilisateur n’a pas installé l’application (puisque l’URL n’a été gérée par aucune application), le lien https peut, par exemple, lui fournir des instructions pour le faire.
- La boîte de dialogue de sélection d’application pour ouvrir l’URL peut être évitée, et votre application peut à la place s’ouvrir automatiquement
En contrepartie, cela nécessite une configuration supplémentaire, car vous devez mettre en place ce fichier d’association hébergé publiquement.
Prise en charge des plateformes et dépendances
Les plateformes actuellement prises en charge sont Android, iOS et macOS.
L'écoute des schémas URI repose sur les méthodes QDesktopServices::setUrlHandler() et QDesktopServices::unsetUrlHandler(). Celles-ci sont actuellement fournies par le module Qt::GUI ; par conséquent, le module QtNetworkAuth dépend de Qt::GUI. Si QtNetworkAuth est compilé sans Qt::GUI, QOAuthUriSchemeReplyHandler ne sera pas inclus.
Android
Sous Android, les schémas URI nécessitent :
- Configurer l'intent-filters e dans le manifeste de l'application
- En option, pour la vérification automatique avec les schémas https, héberger un fichier d'association de site assetlinks.json
Voir également la configuration du fichier de manifeste Qt pour Android.
iOS et macOS
Sous iOS et macOS, les schémas URI nécessitent :
- Configuration de l'association de site entitlement
- Avec les schémas https, héberger un fichier « site association file » (
apple-app-site-association)
Windows, Linux
Non pris en charge pour le moment. Cependant, les plateformes et cas d’utilisation prenant en charge Qt WebEngine peuvent tout de même utiliser ce gestionnaire de réponse – voir la documentation sur la prise en charge de Qt OAuth2 par les navigateurs 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 ou la réponse d'autorisation.
Cette propriété sert de paramètre « redirect_uri » OAuth2, qui est envoyé dans le cadre de la requête d’autorisation. L’ redirect_uri est obtenue en appelant la méthode QUrl::toString() avec les options par défaut.
L'URL doit correspondre à celle enregistrée auprès du serveur d'autorisation, car les serveurs d'autorisation sont susceptibles de rejeter toute URL de redirection (redirect_uri) non conforme.
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 d’accès et tous les éléments de 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 tout paramètre de requête supplémentaire qui aurait pu être défini côté serveur, car ceux-ci contiennent les données réelles qui nous intéressent.
Fonctions d’accès :
| QUrl | redirectUrl() const |
| void | setRedirectUrl(const QUrl &url) |
Signal de notification :
| void | redirectUrlChanged() |
Documentation des fonctions membres
QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler()
Crée un objet `QOAuthUriSchemeReplyHandler` avec les paramètres ` callback` (), ` redirectUrl` () vides et sans parent. L'objet créé n'est pas automatiquement en mode d'écoute.
[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(QObject *parent)
Crée un objet `QOAuthUriSchemeReplyHandler` avec ` parent ` et des paramètres ` callback` vides ()/ `redirectUrl` (). L'objet créé n'est pas automatiquement à l'écoute.
[explicit] QOAuthUriSchemeReplyHandler::QOAuthUriSchemeReplyHandler(const QUrl &redirectUrl, QObject *parent = nullptr)
Crée un objet `QOAuthUriSchemeReplyHandler` et définit parent comme objet parent et redirectUrl comme URL de redirection. L'objet créé tente automatiquement de se mettre à l'écoute.
Voir également redirectUrl(), setRedirectUrl(), listen() et isListening().
[override virtual noexcept] QOAuthUriSchemeReplyHandler::~QOAuthUriSchemeReplyHandler()
Supprime l'objet ` QOAuthUriSchemeReplyHandler `. Ferme ce gestionnaire.
Voir aussi close().
void QOAuthUriSchemeReplyHandler::close()
Indique à ce gestionnaire de cesser d'écouter les URL entrantes.
Voir également listen() et isListening().
[since 6.9] bool QOAuthUriSchemeReplyHandler::handleAuthorizationRedirect(const QUrl &url)
Cette fonction sert à fournir l'URL de redirection fournie par le serveur d'autorisation à la fin de la phase d'autorisation. L'url fournie est soumise au même processus de vérification d'URL que celui décrit à l'adresse redirectUrl.
La fourniture de cette URL peut s’avérer utile dans les cas où celle-ci est récupérée par d’autres moyens, par exemple via Qt WebEngine ou via un autre dispositif 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 ; il est donc recommandé d’appeler ` close()` sur le gestionnaire pour éviter toute écoute inutile.
Renvoie ` true ` si l’URL correspond et a été traitée, ` false ` dans le cas contraire.
Voir également les schémas d’URI de redirection avec ` Qt WebEngine`.
Cette fonction a été introduite dans Qt 6.9.
[noexcept] bool QOAuthUriSchemeReplyHandler::isListening() const
Renvoie « true » si ce gestionnaire est actuellement à l'écoute, et « false » dans le cas contraire.
Voir également listen() et close().
bool QOAuthUriSchemeReplyHandler::listen()
Indique à ce gestionnaire d'écouter les URL entrantes. Renvoie true si l'écoute a abouti, et false dans le cas contraire.
Le gestionnaire comparera les URL à redirectUrl(). Si l'URL reçue ne correspond pas, elle sera transmise à QDesktopServices::openURL().
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 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.