QOAuth2DeviceAuthorizationFlow Class
La clase QOAuth2DeviceAuthorizationFlow proporciona una implementación del flujo Device Authorization Grant. Más...
| Cabecera: | #include <QOAuth2DeviceAuthorizationFlow> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake: | QT += networkauth |
| Desde: | Qt 6.9 |
| Hereda: | QAbstractOAuth2 |
Propiedades
|
|
Funciones públicas
| 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 |
Ranuras públicas
| virtual void | grant() override |
| bool | startTokenPolling() |
| void | stopTokenPolling() |
Señales
| 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) |
Ranuras protegidas
(since 6.9) void | refreshTokensImplementation() |
Descripción detallada
Esta clase implementa el flujo Device Authorization Grant, que se utiliza para obtener y actualizar tokens de acceso y tokens de identificación, especialmente en dispositivos que carecen de un agente de usuario o con capacidades de entrada limitadas. Estos dispositivos incluyen televisores, HMI de máquinas, electrodomésticos y dispositivos IoT.
El flujo de dispositivos puede utilizarse en cualquier plataforma y sistema operativo que sea capaz de realizar solicitudes SSL/TLS. A diferencia de QOAuth2AuthorizationCodeFlow, este flujo no se basa en redireccionamientos y, por tanto, no utiliza reply handler.
Uso del flujo de dispositivos
Los siguientes fragmentos ilustran el uso típico. En primer lugar, configuramos el flujo de forma similar a 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);
A continuación, nos conectamos a la señal authorizeWithUserCode para gestionar la autorización del usuario:
connect(&m_deviceFlow, &QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode, this,[](const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl) { if (completeVerificationUrl.isValid()) { // Si el servidor de autorización ha proporcionado una URL completa // que ya contiene los datos necesarios como parte de los parámetros de la URL, // puede optar por utilizarla. qDebug() << "Complete verification uri:" << completeVerificationUrl; } else { // El servidor de autorización sólo ha proporcionado la URL de verificación; utilícela qDebug() << "Verification uri and usercode:" << verificationUrl << userCode; } } );
Esta parte es crucial para el flujo, y cómo la manejes depende de tu caso de uso específico. De una forma u otra, el usuario necesita completar la autorización.
El flujo del dispositivo no define cómo se completa esta autorización, haciéndolo versátil para diferentes casos de uso. Esto puede lograrse mostrando el URI de verificación y el código de usuario al usuario, que puede navegar hasta él en otro dispositivo. Otra posibilidad es presentar un código QR para que el usuario lo escanee con su dispositivo móvil, lo envíe a una aplicación complementaria, lo envíe por correo electrónico, etc.
Mientras la autorización está pendiente, QOAuth2DeviceAuthorizationFlow sondea el servidor a intervalos específicos (normalmente 5 segundos) hasta que el usuario acepta o rechaza la autorización, tras lo cual el servidor responde en consecuencia y el flujo concluye.
Los errores pueden detectarse de la siguiente manera:
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::serverReportedErrorOccurredLa señal () puede utilizarse para obtener información sobre errores específicos definidos por RFC. Sin embargo, a diferencia de QAbstractOAuth::requestFailed(), no cubre errores tales como errores de red o errores de configuración del cliente.
La finalización del flujo se detecta de forma similar a la de QOAuth2AuthorizationCodeFlow, por ejemplo:
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();
Documentación de propiedades
[read-only] completeVerificationUrl : QUrl
Esta propiedad contiene una URL para que el usuario complete la autorización. La propia URL contiene la dirección user_code y evita así que el usuario tenga que introducir el código manualmente. La compatibilidad con esta URL completa varía según los servidores de autorización.
Funciones de acceso:
| QUrl | completeVerificationUrl() const |
Señal de notificación:
| void | completeVerificationUrlChanged(const QUrl &completeVerificationUrl) |
Véase también verificationUrl y Device Flow Usage.
[read-only] polling : bool
Esta propiedad indica si el flujo está buscando tokens activamente.
Funciones de acceso:
| bool | isPolling() const |
Señal de notificador:
| void | pollingChanged(bool polling) |
Véase también startTokenPolling() y stopTokenPolling().
[read-only] userCode : QString
Esta propiedad contiene el user_code recibido en la respuesta de autorización. Este código es utilizado por el usuario para completar la autorización.
Funciones de acceso:
| QString | userCode() const |
Señal de notificador:
| void | userCodeChanged(const QString &userCode) |
Véase también verificationUrl, completeVerificationUrl, y Device Flow Usage.
[read-only] userCodeExpirationAt : QDateTime
Esta propiedad contiene la hora local a la que caducan el código de usuario y los códigos de dispositivo subyacentes. Los códigos suelen ser válidos entre 5 y 30 minutos.
Funciones de acceso:
| QDateTime | userCodeExpirationAt() const |
Señal del notificador:
| void | userCodeExpirationAtChanged(const QDateTime &expiration) |
Véase también userCode.
[read-only] verificationUrl : QUrl
Esta propiedad contiene la URL donde el usuario debe introducir el código de usuario para completar la autorización.
Funciones de acceso:
| QUrl | verificationUrl() const |
Señal del notificador:
| void | verificationUrlChanged(const QUrl &verificationUrl) |
Véase también userCode, completeVerificationUrl, y Device Flow Usage.
Documentación de las funciones miembro
QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow()
Construye un objeto QOAuth2DeviceAuthorizationFlow.
[explicit] QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QObject *parent)
Construye un objeto QOAuth2DeviceAuthorizationFlow con el objeto padre parent.
[explicit] QOAuth2DeviceAuthorizationFlow::QOAuth2DeviceAuthorizationFlow(QNetworkAccessManager *manager, QObject *parent = nullptr)
Construye un objeto QOAuth2DeviceAuthorizationFlow usando parent como padre y establece manager como gestor de acceso a la red.
[override virtual noexcept] QOAuth2DeviceAuthorizationFlow::~QOAuth2DeviceAuthorizationFlow()
Destruye la instancia QOAuth2DeviceAuthorizationFlow.
[signal] void QOAuth2DeviceAuthorizationFlow::authorizeWithUserCode(const QUrl &verificationUrl, const QString &userCode, const QUrl &completeVerificationUrl)
Esta señal se emite cuando el usuario debe completar la autorización.
Si el servidor de autorización ha proporcionado completeVerificationUrl, el usuario puede navegar a esa URL. La URL contiene el userCode necesario y cualquier otro parámetro necesario.
Alternativamente, el usuario necesita navegar a verificationUrl e introducir userCode manualmente.
Véase también Device Flow Usage.
[override virtual slot] void QOAuth2DeviceAuthorizationFlow::grant()
Reimplementa: QAbstractOAuth::grant().
Inicia el flujo de autorización como se describe en Device Grant RFC.
El flujo consta de los siguientes pasos:
- Solicitud de autorización al servidor de autorización
- Autorización del acceso por parte del usuario, véase authorizeWithUserCode()
- Sondeo del servidor de autorización hasta que el usuario haya aceptado o rechazado la autorización (o expiren los códigos)
- Indicación del resultado a la aplicación (véase granted() y QAbstractOAuth::requestFailed())
El flujo pasa automáticamente de la autorización al sondeo de tokens.
La llamada a esta función restablecerá los datos de autorización anteriores.
Véase también authorizeWithUserCode(), granted(), QAbstractOAuth::requestFailed(), polling, startTokenPolling(), stopTokenPolling(), y Device Flow Usage.
[protected slot, since 6.9] void QOAuth2DeviceAuthorizationFlow::refreshTokensImplementation()
Esta función envía una solicitud de actualización de token.
Si la solicitud de actualización se inició correctamente, el estado se establece en QAbstractOAuth::Status::RefreshingToken; de lo contrario, se emite la señal requestFailed() y el estado no cambia. Los tokens no pueden ser refrescados mientras isPolling es true.
Esta función no tiene ningún efecto si el proceso de actualización del testigo ya está en curso.
Si la actualización del token falla y existe un token de acceso, el estado se establece en QAbstractOAuth::Status::Granted, y en QAbstractOAuth::Status::NotAuthenticated si no existe un token de acceso.
Esta función se introdujo en Qt 6.9.
Véase también QAbstractOAuth::requestFailed() y QAbstractOAuth2::refreshTokens().
[slot] bool QOAuth2DeviceAuthorizationFlow::startTokenPolling()
Inicia el sondeo de tokens. Devuelve true si el inicio tuvo éxito (o ya estaba activo), y false en caso contrario.
Llamar a esta función no es necesario en un caso de uso típico. Una vez completada la solicitud de autorización, como resultado de la llamada a grant(), el sondeo se inicia automáticamente.
Esta función puede ser útil en casos en los que sea necesario reanudar (reintentar) el sondeo de tokens un poco más tarde, sin reiniciar todo el flujo de autorización. Por ejemplo, en caso de pérdida transitoria de la conectividad de red.
El intervalo de sondeo lo define el servidor de autorización y suele ser de 5 segundos. La primera solicitud de sondeo se envía una vez transcurrido el primer intervalo.
Véase también polling, stopTokenPolling(), y Device Flow Usage.
[slot] void QOAuth2DeviceAuthorizationFlow::stopTokenPolling()
Detiene el sondeo de tokens. Las posibles peticiones de sondeo pendientes se descartan silenciosamente.
Véase también polling y 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.