QOAuthHttpServerReplyHandler Class
Gestiona las redirecciones en bucle mediante la configuración de un servidor HTTP local. Más...
| Cabecera: | #include <QOAuthHttpServerReplyHandler> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS NetworkAuth)target_link_libraries(mytarget PRIVATE Qt6::NetworkAuth) |
| qmake: | QT += networkauth |
| Hereda de: | QOAuthOobReplyHandler |
Funciones públicas
| 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) |
Descripción detallada
Esta clase sirve como gestor de respuesta para los procesos de autorización OAuth 2.0 que utilizan la redirección loopback.
El URI de redirección es donde el servidor de autorización redirige el agente de usuario (típicamente, y preferiblemente, el navegador del sistema) una vez que la parte de autorización del flujo se ha completado. Los URI de redirección de bucle invertido utilizan http como esquema y localhost o una dirección IP literal como host (consulte IPv4 and IPv6).
QOAuthHttpServerReplyHandler establece un servidor localhost. Una vez que el servidor de autorización redirige el navegador a esta dirección localhost, el controlador de respuesta analiza los parámetros de consulta de la URI de redirección y, a continuación, señala la finalización de la autorización con a signal.
Para gestionar otros esquemas de URI de redirección, consulte QOAuthUriSchemeReplyHandler.
El siguiente código ilustra el uso. En primer lugar, las variables necesarias:
QOAuth2AuthorizationCodeFlow m_oauth; QOAuthHttpServerReplyHandler *m_handler = nullptr;
A continuación, la configuración de OAuth (se omite la gestión de errores para abreviar):
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(); });
Finalmente, configuramos el URI scheme reply-handler:
m_oauth.setReplyHandler(m_handler); // Initiate the authorization if (m_handler->isListening()) { m_oauth.grant(); }
IPv4 e IPv6
Si el manejador es un manejador de cualquier dirección (AnyIPv4, AnyIPv6, or Any), el callback utilizado tiene la forma de http://localhost:{port}/{path}. El manejador primero intentará escuchar en la dirección IPv4 loopback, y luego en IPv6. Se utiliza localhost porque resuelve correctamente tanto en interfaces IPv4 como IPv6.
Para las direcciones loopback (LocalHost or LocalHostIPv6) se utilizan los literales IP (127.0.0.1 y ::1).
Para direcciones IP específicas se utiliza directamente el literal IP proporcionado, por ejemplo: http://192.168.0.123:{port}/{path} en el caso de una dirección IPv4.
También es posible especificar manualmente la parte del host de la URL de devolución de llamada con setCallbackHost(). Por ejemplo, puede especificar que la devolución de llamada sea localhost.localnet. Naturalmente, debe asegurarse de que dicha dirección sea accesible tras la redirección.
auto replyHandler = new QOAuthHttpServerReplyHandler(QHostAddress::LocalHost, 1337, this); replyHandler->setCallbackHost("localhost.localnet"_L1);
Retrollamadas HTTP y HTTPS
Desde Qt 6.9 es posible configurar el manejador para usar el esquema URI https en lugar de http. Esto se hace proporcionando un QSslConfiguration apropiado cuando se llama a listen(). Internamente, el gestor utilizará QSslServer, y la llamada de retorno (URL de redirección) tendrá la forma https://{host}:{port}/{path}.
El siguiente ejemplo lo ilustra:
// Leer certificado y clave privadaauto 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; }// Crear configuración SSLQSslConfiguration configuración = QSslConfiguration::defaultConfiguration(); configuration.setLocalCertificate(certificates.at(0)); configuration.setPrivateKey(privateKey);// Instanciar handler con la configuración SSLm_handler = new QOAuthHttpServerReplyHandler(1234, this); m_handler->listen(configuration);
Cuando sea posible, se recomienda utilizar otras opciones de URI de redirección, ver Choosing A Reply Handler y Qt OAuth2 Browser Support.
Los principales casos de uso para un gestor https localhost deberían limitarse al tiempo de desarrollo, o a entornos estrictamente controlados y provisionados. Por ejemplo, algunos Servidores de Autorización no permitirán URIs de redirección http, en cuyo caso esto puede añadir comodidad al desarrollo.
Desde el punto de vista de la seguridad, aunque el uso de SSL/TLS cifra el tráfico localhost, OAuth2 también cuenta con otros mecanismos de seguridad como PKCE. Bajo ninguna circunstancia debes distribuir claves de certificados privados junto con la aplicación.
Nota: Los navegadores emitirán advertencias severas si el certificado no es de confianza. Esto es típico con certificados autofirmados, cuyo uso debería limitarse al tiempo de desarrollo.
Documentación de las funciones miembro
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(QObject *parent = nullptr)
Construye un objeto QOAuthHttpServerReplyHandler usando parent como objeto padre. Llama a listen() con el puerto 0 y la dirección LocalHost.
Ver también listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(quint16 port, QObject *parent = nullptr)
Construye un objeto QOAuthHttpServerReplyHandler usando parent como objeto padre. Llama a listen() con port y la dirección LocalHost.
Ver también listen().
[explicit] QOAuthHttpServerReplyHandler::QOAuthHttpServerReplyHandler(const QHostAddress &address, quint16 port, QObject *parent = nullptr)
Construye un objeto QOAuthHttpServerReplyHandler usando parent como objeto padre. Llama a listen() con address y port.
Ver también listen().
[virtual noexcept] QOAuthHttpServerReplyHandler::~QOAuthHttpServerReplyHandler()
Destruye el objeto QOAuthHttpServerReplyHandler. Deja de escuchar conexiones / redirecciones.
Véase también close().
[since 6.9] QString QOAuthHttpServerReplyHandler::callbackHost() const
Devuelve el nombre que se utiliza como componente host del parámetro callback() / OAuth2 redirect_uri.
Esta función se introdujo en Qt 6.9.
Véase también setCallbackHost().
QString QOAuthHttpServerReplyHandler::callbackPath() const
Devuelve la ruta que se utiliza como componente de ruta del parámetro callback() / OAuth2 redirect_uri.
Véase también setCallbackPath().
QString QOAuthHttpServerReplyHandler::callbackText() const
Devuelve el texto que se utiliza en respuesta a la redirección al final de la etapa de autorización.
El texto se envuelve en una simple página HTML, y se muestra al usuario por el navegador / user-agent que hizo la redirección.
El texto por defecto es
Callback received. Feel free to close this page.
Véase también setCallbackText().
void QOAuthHttpServerReplyHandler::close()
Indica a este manejador que deje de escuchar conexiones / redirecciones.
Véase también listen().
bool QOAuthHttpServerReplyHandler::isListening() const
Devuelve true si este manejador está escuchando actualmente, y false en caso contrario.
Véase también listen() y close().
bool QOAuthHttpServerReplyHandler::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Indica a este gestor que escuche las conexiones / redirecciones entrantes en address y port. Devuelve true si la escucha tiene éxito, y false en caso contrario.
La escucha activa sólo es necesaria cuando se realiza la fase de autorización inicial, normalmente iniciada por una llamada a QOAuth2AuthorizationCodeFlow::grant().
Se recomienda cerrar la escucha después de una autorización exitosa. La escucha no es necesaria para requesting access tokens ni para refrescarlos.
Si se llama a esta función con Null como address, el gestor intentará escuchar LocalHost, y si falla, LocalHostIPv6.
Véase también IPv4 and IPv6.
Véase también close(), isListening(), y QTcpServer::listen().
bool QOAuthHttpServerReplyHandler::listen(const QSslConfiguration &configuration, const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
Indica a este gestor que escuche las conexiones / redirecciones entrantes de https en address y port. Devuelve true si la escucha tiene éxito, y false en caso contrario.
Ver HTTP and HTTPS Callbacks para mas informacion.
Vea tambien listen(const QHostAddress &, quint16), close(), isListening(), QSslServer, y QTcpServer::listen().
quint16 QOAuthHttpServerReplyHandler::port() const
Devuelve el puerto en el que este manejador está escuchando, de lo contrario devuelve 0.
Véase también listen() y isListening().
[since 6.9] void QOAuthHttpServerReplyHandler::setCallbackHost(const QString &host)
Establece host para ser utilizado como el componente de nombre de host de callback(). Proporcionar un host no vacío anula el comportamiento por defecto, ver IPv4 and IPv6.
Esta función se introdujo en Qt 6.9.
Véase también callbackHost().
void QOAuthHttpServerReplyHandler::setCallbackPath(const QString &path)
Establece path para que se utilice como componente de ruta de callback().
Véase también callbackPath().
void QOAuthHttpServerReplyHandler::setCallbackText(const QString &text)
Establece text que se utilizará en respuesta a la redirección al final de la etapa de autorización.
Véase también 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.