Autenticación¶
Los clientes QFieldCloud y QField/QFieldSync permiten la autenticación mediante nombre de usuario y contraseña habituales o, si está configurado, OpenID Connect con un proveedor de identidad de terceros.
Autenticación de OpenID Connect¶
OpenID Connect (OIDC) es un protocolo de autenticación estándar de la industria basado en OAuth2. Este protocolo permite delegar la autenticación a un proveedor de identidad (IDP), como Google, Microsoft o cualquier otro proveedor compatible con OpenID Connect. Esto permite a los usuarios iniciar sesión en QFieldCloud con sus cuentas existentes en estos proveedores, sin necesidad de crear una cuenta independiente.
OIDC se puede utilizar directamente para registrarse en QFieldCloud o para iniciar sesión en una cuenta QFieldCloud existente (vinculada a través de una dirección de correo electrónico verificada).
QFieldCloud (Web)¶
Aquí hay un diagrama de secuencia de cómo ocurre un inicio de sesión de terceros en QFieldCloud (en el navegador):
sequenceDiagram
autonumber
actor User as User (Browser)
participant QFC as QFieldCloud
User ->> QFC: Access login page
QFC -->> User: Display login form with configured third-party login buttons
User ->> QFC: Click third-party login button
QFC -->> User: Redirect to IDP for login
create participant IDP as Identity Provider
User ->> IDP: Follow redirect to IDP login page
IDP -->> User: Display IDP's login page
User ->> IDP: Authenticate using IDP credentials
IDP -->> User: Redirect to QFieldCloud callback URL with authorization code
User ->>+ QFC: Hand authorization code to QFieldCloud
QFC ->> IDP: Exchange authorization code for access token and ID token
IDP -->> QFC: Return access token + ID token
Note over QFC: Validate ID token signature
QFC ->> IDP: Request user profile information
destroy IDP
IDP -->> QFC: Return user profile information
alt If user does not already have a QFieldCloud account
note over QFC: QFieldCloud account is created using IDP profile infos
end
QFC -->>- User: Log user in (establish session)
QField / QFieldSync¶
A continuación se muestra un diagrama de secuencia de cómo se realiza la autenticación de terceros en QField y QFieldSync:
sequenceDiagram
autonumber
participant IDP as Identity Provider
actor User
participant QF as QField / QFieldSync
participant QFC as QFieldCloud
User ->>+ QF: Open the QFieldCloud login dialog
QF ->> QFC: Ask for list of identity providers
QFC -->> QF: Answer with list of identity providers
QF -->>- User: Display a button for each identity provider
User ->>+ QF: Click on 'Login with XYZ' provider button
QF ->> IDP: Redirect to IDP for login
IDP -->> User: Display IDP's login form in a browser
User ->> IDP: Log in using IDP's credentials in the browser
IDP -->> QF: Answer with authorization code
QF ->> IDP: Exchange authorization code for access token and ID token
IDP -->> QF: Answer with access token and ID token
QF ->> QFC: Use ID token to authenticate user
Nota sobre QFC: Validar la firma del token de identificación
QFC -->> QF: Establish user session and return user info
QF -->>- User: User is logged in and authenticated
loop HTTP requests to QFieldCloud
QF ->> QFC: Send a request (e.g. file Download/Upload)
Note over QF,QFC: Tokens are attached to requests in HTTP headers
QFC -->> QF: Reply to the request
end
loop refresh token regularly
QF ->> IDP: Ask for a new token
IDP -->> QF: Send a refreshed token
end
Detalles¶
-
Abrir el cuadro de diálogo de inicio de sesión de QFieldCloud El usuario hace clic en el botón de inicio de sesión de QFieldCloud en QField / QFieldSync
-
Solicitar lista de proveedores de identidad Consulte el punto final
api/v1/auth/providers
de QFieldCloud para obtener una lista de proveedores de identidad habilitados y sus detalles de configuración. -
Responder con lista de proveedores de identidad Devuelve la lista de proveedores de identidad habilitados. Para cada IDP, esto incluirá información para renderizar la interfaz de usuario (título, logotipo, colores), así como los detalles de configuración de OIDC necesarios para el IDP en cuestión. Estos incluyen propiedades como el ID de cliente, la URL del token, etc., para que QField/QFieldSync se conecte al IDP.
-
Mostrar un botón para cada proveedor de identidad Para cada método de autenticación habilitado se muestra un botón de inicio de sesión.
-
Haga clic en el botón 'Iniciar sesión con el proveedor XYZ' El usuario hace clic en el botón para iniciar sesión con un proveedor en particular. En este punto, QField/QFieldSync creará un nuevo
QgsAuthMethodConfig
de tipo OAuth2 y utilizará los detalles de configuración de OIDC recibidos de QFieldCloud para configurarlo. -
Redireccionar a IDP para iniciar sesión Luego, QField/QFieldSync abrirá una ventana del navegador y enviará al usuario a la página de inicio de sesión del IDP. En la URL de esa página de inicio de sesión se incluye una redirect_url que apunta a la devolución de llamada en la que QField/QField Sync recibirá la respuesta del IDP que incluirá el código de autorización. Para tal propósito, QField/QFieldSync generará un servidor web temporal en
http://localhost:7070
que recibirá esa devolución de llamada. -
Mostrar el formulario de inicio de sesión de IDP en un navegador El IDP presenta al usuario una página de inicio de sesión y un formulario de consentimiento.
-
Inicie sesión utilizando las credenciales de IDP en el navegador El usuario se autentica en el IDP, utilizando cualquier método de autenticación que el IDP admita (nombre de usuario/contraseña, certificado de cliente, sesión, ...).
-
Responde con código de autorización El IDP redirigirá el navegador del usuario a redirect_url, donde el servidor web temporal de QField/QFieldSync recibirá la devolución de llamada, que incluye el código de autorización OIDC de larga duración.
-
Código de autorización de intercambio para token de acceso y token de identificación QField/QFieldSync enviará el código de autorización al punto final del token del IDP y lo intercambiará por el token de identificación, el token de acceso y el token de actualización.
-
Responder con token de acceso y token de identificación El IDP verifica el código de autorización (con la adición de PKCE) y responde con un token de identificación, un token de acceso y un token de actualización, que son de corta duración.
-
** Usar token de identificación para autenticar al usuario ** QField/QFieldSync enviará el token de identificación y el token de acceso a QFieldCloud y solicitará la información del perfil del usuario.
-
Establecer sesión de usuario y devolver la información del usuario QFieldCloud verificará la firma del token de identificación y autenticará al usuario. Si la verificación es exitosa, responderá con la información del perfil del usuario y una sesión de usuario.
-
** El usuario está conectado y autenticado ** QField/QFieldSync recibirá y almacenará la información del perfil del usuario y la sesión de autenticación.
Bucle de solicitud¶
-
Enviar una solicitud (por ejemplo, descargar o cargar un archivo) Una vez que un usuario se ha autenticado con el IDP y QField/QFieldSync ha recibido los tokens OIDC, adjuntará el token de identificación y el token de acceso en solicitudes posteriores a QFieldCloud como encabezados de solicitud HTTP. (Técnicamente hablando, en realidad es el administrador de autenticación de QGIS el que hará esto). El token de acceso se incluye como una
Autorización: Portador <access_token>
Encabezado HTTP y el token de identificación se incluye en el encabezado HTTPX-QFC-ID-Token
. El tipo de proveedor de IDP (por ejemplo,google
) se incluye en el encabezado HTTPX-QFC-IDP-ID
para que QFieldCloud sepa con qué IDP se debe verificar el token. -
Responder a la solicitud QFieldCloud autenticará al usuario, ya sea a través de una sesión existente o a través de los tokens OIDC, y responderá a la solicitud.
Bucle de actualización de tokens¶
-
Solicitar un nuevo token QField/QFieldSync actualizará periódicamente los tokens de ID y acceso llamando al punto final de actualización de token del IDP y enviando el token de actualización que recibió.
-
Enviar un token actualizado El IDP responderá con una nueva identificación y tokens de acceso.