Cuentas sociales en GeoNode

Permitir que GeoNode inicie sesión a través de cuentas sociales (OIDC)

Introducción

A través de las llamadas “cuentas sociales”, GeoNode permite la autenticación a través de proveedores externos que soportan el protocolo OIDC (OpenID Connect), como Google y Microsoft Azure.

¿Cómo funciona? Una vez que el proveedor de autenticación está configurado, la página de inicio de sesión de GeoNode mostrará un nuevo botón de acceso que redirige al usuario a la página de autenticación externa. Después de autenticarse exitosamente con el proveedor externo y aceptar los consentimientos de privacidad, el navegador redirigirá al usuario de vuelta a la página de GeoNode, solicitándole que ingrese cualquier información faltante la primera vez y autenticándolo automáticamente en ocasiones posteriores.

Uso

Una vez que el proveedor ha sido configurado correctamente (ver más abajo), GeoNode permitirá que el usuario inicie sesión a través de él.

La primera vez que inicies sesión, probablemente necesitarás confirmar tu e-mail y otros campos del perfil.

Nota

Si deseas que un usuario se registre automáticamente como miembro de un grupo, deberás:

  1. Crear el GroupProfile en GeoNode

  2. Proporcionar los groups o roles a los que pertenece el usuario a través del id_token o user_info metadata del propio proveedor OIDC.

Ten en cuenta que, si deseas beneficiarte de esta funcionalidad:

  1. Cada vez que el usuario vuelva a iniciar sesión, los grupos se reasignarán automáticamente por GeoNode, por lo que no será posible asignarlos manualmente.

  2. Si necesitas que un usuario sea reconocido como manager de los groups declarados por el proveedor, deberás enviar una reclamación is_manager: True en los metadatos de información del usuario.

Configuración rápida

Actualmente, GeoNode viene con dos configuraciones predefinidas que puedes usar para habilitar Google o Microsoft Azure.

Google

  1. Añade a tu .env las siguientes configuraciones

    SOCIALACCOUNT_OIDC_PROVIDER_ENABLED=True
    SOCIALACCOUNT_PROVIDER=google
    
  2. Inicia sesión en GeoNode como admin, ve a la configuración de Social Account, crea un nuevo proveedor geonode_openid_connect e inserta el

    Client ID
    Client Secret
    

Microsoft Azure

  1. Añade a tu .env las siguientes configuraciones

    MICROSOFT_TENANT_ID=<the_tenant_id>
    SOCIALACCOUNT_OIDC_PROVIDER_ENABLED=True
    SOCIALACCOUNT_PROVIDER=azure
    
  2. Inicia sesión en GeoNode como admin, ve a la configuración de Social Account, crea un nuevo proveedor geonode_openid_connect e inserta el

    Client ID
    Client Secret
    

Configuración avanzada

En caso de que necesites cambiar el comportamiento predeterminado de GeoNode o agregar un proveedor OIDC nuevo/personalizado, deberás actualizar la configuración manualmente de la siguiente manera.

SOCIALACCOUNT_PROVIDERS = {
    SOCIALACCOUNT_OIDC_PROVIDER: {
        "NAME": "Your Custom Provider",
        "SCOPE": [
            # Custom scopes comma-separated
        ],
        "AUTH_PARAMS": {
            # Custom AUTH PARAMS
        },
        "COMMON_FIELDS": {"email": "email", "last_name": "family_name", "first_name": "given_name"},  # Custom common fields mappings
        "IS_MANAGER_FIELD": "the_custom_manager_claim",  # This is optional
        "ACCOUNT_CLASS": "the_custom_account_class",
        "ACCESS_TOKEN_URL": "the_custom_token_uri",
        "AUTHORIZE_URL": "the_custom_auth_uri",
        "ID_TOKEN_ISSUER": "the_custom_uri",  # or "PROFILE_URL": "the_custom_user_info_uri"; if you specify the "ID_TOKEN_ISSUER" this will take precedence
        "OAUTH_PKCE_ENABLED": True,
    }
}

Nota

Si especificas «ID_TOKEN_ISSUER», esto tendrá prioridad al intentar obtener los metadatos de información del usuario del id_token.

Si el id_token no está disponible, intentará volver a la URI «PROFILE_URL».

En caso de que necesites personalizar cómo funciona el Adapter y cómo gestiona el registro de Groups, puedes inyectar una nueva clase a través de la configuración:

SOCIALACCOUNT_ADAPTER="geonode.people.adapters.GenericOpenIDConnectAdapter"  # This is the default value