QOAuth2DeviceAuthorizationFlow Class
Die Klasse QOAuth2DeviceAuthorizationFlow bietet eine Implementierung des Flusses " Device Authorization Grant ". Mehr...
Kopfzeile: | #include <QOAuth2DeviceAuthorizationFlow> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth) target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
qmake: | QT += networkauth |
Seit: | Qt 6.9 |
Vererbt: | QAbstractOAuth2 |
Eigenschaften
|
|
Öffentliche Funktionen
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 |
Öffentliche Slots
virtual void | grant() override |
bool | startTokenPolling() |
void | stopTokenPolling() |
Signale
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) |
Geschützte Steckplätze
(since 6.9) void | refreshTokensImplementation() |
Detaillierte Beschreibung
Diese Klasse implementiert den Fluss der Geräteautorisierung, der zum Abrufen und Aktualisieren von Zugangs- und ID-Tokens verwendet wird, insbesondere auf Geräten ohne Benutzer-Agent oder mit eingeschränkten Eingabefähigkeiten. Zu diesen Geräten gehören Fernsehgeräte, Maschinen-HMIs, Geräte und IoT-Geräte.
Der Gerätefluss kann auf allen Plattformen und Betriebssystemen verwendet werden, die SSL/TLS-Anfragen verarbeiten können. Im Gegensatz zu QOAuth2AuthorizationCodeFlow basiert dieser Fluss nicht auf Umleitungen und verwendet daher keine reply handler.
Verwendung von Device Flow
Die folgenden Schnipsel veranschaulichen die typische Verwendung. Zunächst richten wir den Fluss ähnlich wie QOAuth2AuthorizationCodeFlow ein:
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);
Dann stellen wir eine Verbindung zum Signal authorizeWithUserCode her, um die Benutzerautorisierung zu handhaben:
connect(&m_deviceFlow, &QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode, this,[](const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl) { if (completeVerificationUrl.isValid()) { // Wenn der Autorisierungsserver eine vollständige URL // zur Verfügung gestellt hat , die bereits die erforderlichen Daten als Teil der URL-Parameter enthält, // können Sie diese verwenden qDebug() << "Complete verification uri:" << completeVerificationUrl; } else { // Der Autorisierungsserver hat nur die Verifizierungs-URL bereitgestellt; verwenden Sie diese qDebug() << "Verification uri and usercode:" << verificationUrl << userCode; } } );
Dieser Teil ist für den Ablauf entscheidend, und wie Sie ihn handhaben, hängt von Ihrem spezifischen Anwendungsfall ab. Auf die eine oder andere Weise muss der Benutzer die Autorisierung abschließen.
Der Geräteablauf legt nicht fest, wie diese Autorisierung abgeschlossen wird, so dass er für unterschiedliche Anwendungsfälle vielseitig einsetzbar ist. Dies kann erreicht werden, indem dem Benutzer der Verifizierungs-URI und der Benutzercode angezeigt werden, zu denen er dann auf einem anderen Gerät navigieren kann. Alternativ können Sie einen QR-Code anzeigen, den der Benutzer mit seinem Mobilgerät scannen, an eine Zusatzanwendung senden, per E-Mail an den Benutzer senden usw.
Während der Autorisierung fragt QOAuth2DeviceAuthorizationFlow den Server in bestimmten Abständen (in der Regel 5 Sekunden) ab, bis der Benutzer die Autorisierung akzeptiert oder ablehnt, woraufhin der Server entsprechend antwortet und der Vorgang abgeschlossen ist.
Fehler können wie folgt erkannt werden:
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::serverReportedErrorOccurredDas ()-Signal kann verwendet werden, um Informationen über bestimmte RFC-definierte Fehler zu erhalten. Im Gegensatz zu QAbstractOAuth::requestFailed() deckt es jedoch keine Fehler wie Netzwerkfehler oder Client-Konfigurationsfehler ab.
Der Abschluss des Datenflusses wird in ähnlicher Weise erkannt wie z. B. bei QOAuth2AuthorizationCodeFlow:
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();
Eigenschaft Dokumentation
[read-only]
completeVerificationUrl : const QUrl
Diese Eigenschaft enthält eine URL, über die der Benutzer die Autorisierung abschließen kann. Die URL selbst enthält die user_code
und erspart dem Benutzer somit die manuelle Eingabe des Codes. Die Unterstützung für diese vollständige URL variiert zwischen den Autorisierungsservern.
Zugriffsfunktionen:
QUrl | completeVerificationUrl() const |
Benachrichtigungssignal:
void | completeVerificationUrlChanged(const QUrl &completeVerificationUrl) |
Siehe auch verificationUrl und Device Flow Usage.
[read-only]
polling : const bool
Diese Eigenschaft gibt an, ob der Fluss aktiv nach Token fragt oder nicht.
Zugriffsfunktionen:
bool | isPolling() const |
Notifier-Signal:
void | pollingChanged(bool polling) |
Siehe auch startTokenPolling() und stopTokenPolling().
[read-only]
userCode : const QString
Diese Eigenschaft enthält den in der Autorisierungsantwort erhaltenen user_code. Dieser Code wird vom Benutzer verwendet, um die Autorisierung abzuschließen.
Zugriffsfunktionen:
QString | userCode() const |
Benachrichtigungssignal:
void | userCodeChanged(const QString &userCode) |
Siehe auch verificationUrl, completeVerificationUrl, und Device Flow Usage.
[read-only]
userCodeExpirationAt : const QDateTime
Diese Eigenschaft enthält die lokale Zeit, zu der der Benutzercode und die zugrunde liegenden Gerätecodes ablaufen. Die Codes sind normalerweise zwischen 5 und 30 Minuten gültig.
Zugriffsfunktionen:
QDateTime | userCodeExpirationAt() const |
Benachrichtigungssignal:
void | userCodeExpirationAtChanged(const QDateTime &expiration) |
Siehe auch userCode.
[read-only]
verificationUrl : const QUrl
Diese Eigenschaft enthält die URL, in die der Benutzer den Benutzercode eingeben muss, um die Autorisierung abzuschließen.
Zugriffsfunktionen:
QUrl | verificationUrl() const |
Benachrichtigungssignal:
void | verificationUrlChanged(const QUrl &verificationUrl) |
Siehe auch userCode, completeVerificationUrl, und Device Flow Usage.
Dokumentation der Mitgliedsfunktionen
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow()
Konstruiert ein QOAuth2DeviceAuthorizationFlow-Objekt.
[explicit]
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QObject *parent)
Konstruiert ein QOAuth2DeviceAuthorizationFlow-Objekt mit dem übergeordneten Objekt parent.
[explicit]
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
Konstruiert ein QOAuth2DeviceAuthorizationFlow-Objekt mit parent als übergeordnetem Objekt und setzt manager als Netzwerkzugriffsmanager.
[override virtual noexcept]
QOAuth2DeviceAuthorizationFlow::~QOAuth2DeviceAuthorizationFlow()
Zerstört die Instanz QOAuth2DeviceAuthorizationFlow.
[signal]
void QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)
Dieses Signal wird ausgesendet, wenn der Benutzer die Autorisierung abschließen soll.
Wenn der Autorisierungsserver completeVerificationUrl bereitgestellt hat, kann der Benutzer zu dieser URL navigieren. Die URL enthält die erforderlichen userCode und alle anderen erforderlichen Parameter.
Alternativ dazu muss der Benutzer zu verificationUrl navigieren und userCode manuell eingeben.
Siehe auch Device Flow Usage.
[override virtual slot]
void QOAuth2DeviceAuthorizationFlow::grant()
Reimplements: QAbstractOAuth::grant().
Startet den Autorisierungsfluss wie in Device Grant RFC beschrieben.
Der Fluss besteht aus den folgenden Schritten:
- Autorisierungsanfrage an den Autorisierungsserver
- Benutzer autorisiert den Zugriff, siehe authorizeWithUserCode()
- Abfrage des Autorisierungsservers, bis der Benutzer die Autorisierung akzeptiert oder abgelehnt hat (oder die Codes ablaufen)
- Anzeige des Ergebnisses an die Anwendung (siehe granted() und QAbstractOAuth::requestFailed())
Der Ablauf schreitet automatisch von der Autorisierung bis zur Abfrage des Tokens fort.
Der Aufruf dieser Funktion setzt alle vorherigen Autorisierungsdaten zurück.
Siehe auch authorizeWithUserCode(), granted(), QAbstractOAuth::requestFailed(), polling, startTokenPolling(), stopTokenPolling(), und Device Flow Usage.
[protected slot, since 6.9]
void QOAuth2DeviceAuthorizationFlow::refreshTokensImplementation()
Diese Funktion sendet eine Token-Auffrischungsanforderung.
Wenn die Auffrischungsanforderung erfolgreich initiiert wurde, wird der Status auf QAbstractOAuth::Status::RefreshingToken gesetzt; andernfalls wird das Signal requestFailed() ausgegeben und der Status wird nicht geändert. Token können nicht aufgefrischt werden, solange isPolling true
ist.
Diese Funktion hat keine Auswirkung, wenn der Vorgang der Tokenauffrischung bereits im Gange ist.
Wenn das Auffrischen des Tokens fehlschlägt und ein Zugriffstoken existiert, wird der Status auf QAbstractOAuth::Status::Granted gesetzt, und auf QAbstractOAuth::Status::NotAuthenticated, wenn kein Zugriffstoken existiert.
Diese Funktion wurde in Qt 6.9 eingeführt.
Siehe auch QAbstractOAuth::requestFailed() und QAbstractOAuth2::refreshTokens().
[slot]
bool QOAuth2DeviceAuthorizationFlow::startTokenPolling()
Startet die Abfrage von Token. Gibt true
zurück, wenn der Start erfolgreich war (oder bereits aktiv war), und andernfalls false
.
Der Aufruf dieser Funktion ist in einem typischen Anwendungsfall nicht erforderlich. Sobald die Autorisierungsanfrage als Ergebnis des Aufrufs grant() abgeschlossen ist, wird die Abfrage automatisch gestartet.
Diese Funktion kann in Fällen nützlich sein, in denen die Abfrage des Tokens etwas später wieder aufgenommen werden muss, ohne dass der gesamte Autorisierungsablauf neu gestartet werden muss. Zum Beispiel im Falle eines vorübergehenden Verlusts der Netzwerkverbindung.
Das Abfrageintervall wird vom Autorisierungsserver festgelegt und beträgt normalerweise 5 Sekunden. Die erste Abfrage wird gesendet, sobald das erste Intervall verstrichen ist.
Siehe auch polling, stopTokenPolling(), und Device Flow Usage.
[slot]
void QOAuth2DeviceAuthorizationFlow::stopTokenPolling()
Stoppt das Token-Polling. Alle potenziell ausstehenden Abfrageanfragen werden stillschweigend verworfen.
Siehe auch polling und startTokenPolling().
© 2025 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.