Sur cette page

QOAuth2DeviceAuthorizationFlow Class

La classe QOAuth2DeviceAuthorizationFlow fournit une implémentation du flux d'autorisation des appareils. Plus d'informations...

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

Propriétés

Fonctions publiques

QOAuth2DeviceAuthorizationFlow()
QOAuth2DeviceAuthorizationFlow(QObject *parent)
QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
virtual ~QOAuth2DeviceAuthorizationFlow() override
QUrl completeVerificationUrl() const
bool isPolling() const
QString userCode() const
QDateTime userCodeExpirationAt() const
QUrl verificationUrl() const

Emplacements publics

virtual void grant() override
bool startTokenPolling()
void stopTokenPolling()

Signaux

void authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)
void completeVerificationUrlChanged(const QUrl &completeVerificationUrl)
void pollingChanged(bool polling)
void userCodeChanged(const QString &userCode)
void userCodeExpirationAtChanged(const QDateTime &expiration)
void verificationUrlChanged(const QUrl &verificationUrl)

Emplacements protégés

(since 6.9) void refreshTokensImplementation()

Description détaillée

Cette classe met en œuvre le flux d'autorisation des appareils, qui est utilisé pour obtenir et rafraîchir les jetons d'accès et les jetons d'identification, en particulier sur les appareils dépourvus d'agent utilisateur ou dont les capacités de saisie sont limitées. Ces dispositifs comprennent les téléviseurs, les IHM de machines, les appareils et les dispositifs IoT.

Le flux Device peut être utilisé sur n'importe quelle plateforme et n'importe quel système d'exploitation capable de traiter des requêtes SSL/TLS. Contrairement à QOAuth2AuthorizationCodeFlow, ce flux n'est pas basé sur des redirections et n'utilise donc pas de reply handler.

Utilisation du flux d'appareils

Les extraits suivants illustrent l'utilisation typique. Tout d'abord, nous configurons le flux de la même manière que pour QOAuth2AuthorizationCodeFlow:

m_deviceFlow.setAuthorizationUrl(QUrl(authorizationUrl));
m_deviceFlow.setTokenUrl(QUrl(accessTokenUrl));
m_deviceFlow.setRequestedScopeTokens({scope});
m_deviceFlow.setClientIdentifier(clientIdentifier);
// The need for a client secret depends on the authorization server
m_deviceFlow.setClientIdentifierSharedKey(clientSecret);

Ensuite, nous nous connectons au signal authorizeWithUserCode pour gérer l'autorisation de l'utilisateur :

connect(&m_deviceFlow, &QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode, this,[](const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl) { if (completeVerificationUrl.isValid()) { // Si le serveur d'autorisation a fourni une URL complète // qui contient déjà les données nécessaires dans les paramètres de l'URL, // vous pouvez choisir d'utiliser cetteURL .            qDebug() << "Complete verification uri:" << completeVerificationUrl;
        } else { // Le serveur d'autorisation n'a fourni que l'URL de vérification ; utilisez-la.            qDebug() << "Verification uri and usercode:" << verificationUrl << userCode;
        } } ) ;

Cette partie est cruciale pour le flux, et la manière dont vous la traitez dépend de votre cas d'utilisation spécifique. D'une manière ou d'une autre, l'utilisateur doit compléter l'autorisation.

Le flux du dispositif ne définit pas la manière dont l'autorisation est complétée, ce qui le rend polyvalent pour différents cas d'utilisation. Cela peut se faire en affichant l'URI de vérification et le code utilisateur à l'utilisateur, qui peut ensuite naviguer jusqu'à lui sur un autre appareil. Vous pouvez également présenter un code QR que l'utilisateur peut scanner avec son appareil mobile, envoyer à une application complémentaire, envoyer un courriel à l'utilisateur, etc.

Pendant que l'autorisation est en attente, QOAuth2DeviceAuthorizationFlow interroge le serveur à des intervalles spécifiques (généralement 5 secondes) jusqu'à ce que l'utilisateur accepte ou rejette l'autorisation, après quoi le serveur répond en conséquence et le flux se termine.

Les erreurs peuvent être détectées comme suit :

connect(&m_deviceFlow, &QAbstractOAuth::requestFailed, this, [](QAbstractOAuth::Error error) {
    Q_UNUSED(error);
    // Handle error
});

connect(&m_deviceFlow, &QAbstractOAuth2::serverReportedErrorOccurred, this,
    [](const QString &error, const QString &errorDescription, const QUrl &uri) {
        // Check server reported error details if needed
        Q_UNUSED(error);
        Q_UNUSED(errorDescription);
        Q_UNUSED(uri);
    }
);

QAbstractOAuth2::serverReportedErrorOccurredLe signal () peut être utilisé pour obtenir des informations sur des erreurs spécifiques définies par le RFC. Cependant, contrairement à QAbstractOAuth::requestFailed(), il ne couvre pas les erreurs telles que les erreurs de réseau ou de configuration du client.

L'achèvement du flux est détecté de la même manière qu'avec QOAuth2AuthorizationCodeFlow, par exemple :

connect(&m_deviceFlow, &QAbstractOAuth::granted, this, [this](){
    // Here we use QNetworkRequestFactory to store the access token
    m_api.setBearerToken(m_deviceFlow.token().toLatin1());
});
m_deviceFlow.grant();

Documentation sur les biens

[read-only] completeVerificationUrl : QUrl

Cette propriété contient une URL permettant à l'utilisateur de compléter l'autorisation. L'URL elle-même contient l'adresse user_code, ce qui évite à l'utilisateur de devoir saisir le code manuellement. La prise en charge de cette URL complète varie selon les serveurs d'autorisation.

Fonctions d'accès :

QUrl completeVerificationUrl() const

Signal de notification :

void completeVerificationUrlChanged(const QUrl &completeVerificationUrl)

Voir également verificationUrl et Device Flow Usage.

[read-only] polling : bool

Cette propriété indique si le flux demande activement des jetons.

Fonctions d'accès :

bool isPolling() const

Notifier signal :

void pollingChanged(bool polling)

Voir également startTokenPolling() et stopTokenPolling().

[read-only] userCode : QString

Cette propriété contient le code utilisateur reçu dans la réponse d'autorisation. Ce code est utilisé par l'utilisateur pour compléter l'autorisation.

Fonctions d'accès :

QString userCode() const

Notifier signal :

void userCodeChanged(const QString &userCode)

Voir aussi verificationUrl, completeVerificationUrl, et Device Flow Usage.

[read-only] userCodeExpirationAt : QDateTime

Cette propriété indique l'heure locale à laquelle le code utilisateur et les codes des appareils sous-jacents expirent. Les codes sont généralement valables entre 5 et 30 minutes.

Fonctions d'accès :

QDateTime userCodeExpirationAt() const

Signal de notification :

void userCodeExpirationAtChanged(const QDateTime &expiration)

Voir aussi userCode.

[read-only] verificationUrl : QUrl

Cette propriété contient l'URL où l'utilisateur doit entrer le code d'utilisateur pour compléter l'autorisation.

Fonctions d'accès :

QUrl verificationUrl() const

Signal de notification :

void verificationUrlChanged(const QUrl &verificationUrl)

Voir aussi userCode, completeVerificationUrl, et Device Flow Usage.

Documentation des fonctions membres

QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow()

Construit un objet QOAuth2DeviceAuthorizationFlow.

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

Construit un objet QOAuth2DeviceAuthorizationFlow avec l'objet parent parent.

[explicit] QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)

Construit un objet QOAuth2DeviceAuthorizationFlow en utilisant parent comme parent et définit manager comme gestionnaire d'accès au réseau.

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

Détruit l'instance QOAuth2DeviceAuthorizationFlow.

[signal] void QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)

Ce signal est émis lorsque l'utilisateur doit terminer l'autorisation.

Si le serveur d'autorisation a fourni completeVerificationUrl, l'utilisateur peut naviguer vers cette URL. L'URL contient l'adresse userCode et tous les autres paramètres nécessaires.

Sinon, l'utilisateur doit se rendre à verificationUrl et entrer userCode manuellement.

Voir aussi Device Flow Usage.

[override virtual slot] void QOAuth2DeviceAuthorizationFlow::grant()

Réimplémente : QAbstractOAuth::grant().

Démarre le flux d'autorisation tel que décrit dans le RFC Device Grant.

Le flux se compose des étapes suivantes :

  • Demande d'autorisation au serveur d'autorisation
  • L'utilisateur autorise l'accès, voir authorizeWithUserCode()
  • Interrogation du serveur d'autorisation jusqu'à ce que l'utilisateur ait accepté ou rejeté l'autorisation (ou que les codes expirent).
  • Indication du résultat à l'application (voir granted() et QAbstractOAuth::requestFailed())

Le flux progresse automatiquement de l'autorisation à l'interrogation des jetons.

L'appel de cette fonction réinitialise toutes les données d'autorisation antérieures.

Voir également authorizeWithUserCode(), granted(), QAbstractOAuth::requestFailed(), polling, startTokenPolling(), stopTokenPolling() et Device Flow Usage.

[protected slot, since 6.9] void QOAuth2DeviceAuthorizationFlow::refreshTokensImplementation()

Cette fonction envoie une demande de rafraîchissement du jeton.

Si la demande de rafraîchissement a été initiée avec succès, le statut est mis à QAbstractOAuth::Status::RefreshingToken; sinon, le signal requestFailed() est émis et le statut n'est pas modifié. Les jetons ne peuvent pas être rafraîchis tant que isPolling est true.

Cette fonction n'a aucun effet si le processus de rafraîchissement du jeton est déjà en cours.

Si le rafraîchissement du jeton échoue et qu'un jeton d'accès existe, le statut est fixé à QAbstractOAuth::Status::Granted, et à QAbstractOAuth::Status::NotAuthenticated s'il n'existe pas de jeton d'accès.

Cette fonction a été introduite dans Qt 6.9.

Voir aussi QAbstractOAuth::requestFailed() et QAbstractOAuth2::refreshTokens().

[slot] bool QOAuth2DeviceAuthorizationFlow::startTokenPolling()

Démarre l'interrogation des jetons. Renvoie true si le démarrage a réussi (ou était déjà actif), et false dans le cas contraire.

L'appel à cette fonction n'est pas nécessaire dans un cas d'utilisation typique. Une fois la demande d'autorisation terminée, à la suite de l'appel à grant(), l'interrogation est lancée automatiquement.

Cette fonction peut être utile dans les cas où il est nécessaire de reprendre (réessayer) l'interrogation des jetons un peu plus tard, sans redémarrer l'ensemble du flux d'autorisation. Par exemple, en cas de perte transitoire de connectivité réseau.

L'intervalle d'interrogation est défini par le serveur d'autorisation et est généralement de 5 secondes. La première demande d'interrogation est envoyée une fois que le premier intervalle s'est écoulé.

Voir aussi polling, stopTokenPolling(), et Device Flow Usage.

[slot] void QOAuth2DeviceAuthorizationFlow::stopTokenPolling()

Arrête l'interrogation des jetons. Toute demande d'interrogation potentielle en suspens est rejetée silencieusement.

Voir aussi polling et startTokenPolling().

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