Saltar a contenido

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

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

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

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

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

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

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

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

  8. 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, ...).

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

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

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

  12. ** 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.

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

  14. ** 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

  1. 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 HTTP X-QFC-ID-Token. El tipo de proveedor de IDP (por ejemplo, google) se incluye en el encabezado HTTP X-QFC-IDP-ID para que QFieldCloud sepa con qué IDP se debe verificar el token.

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

  1. 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ó.

  2. Enviar un token actualizado El IDP responderá con una nueva identificación y tokens de acceso.