Seguridad OAuth2: autenticación y autorización¶
GeoNode interactúa con GeoServer a través de un mecanismo de seguridad avanzado basado en el protocolo OAuth2 y GeoFence.Esta sección es un recorrido por la configuración y configuración de GeoNode y GeoServer Advanced Security.
Lo que veremos en este apartado es:
Introducción
GeoNode (Backend de seguridad):
Autenticación Django
Instalación y configuración del kit de herramientas Django OAuth
Detalles sobre la configuración de seguridad
settings.py
GeoServer (backend de seguridad):
Subsistema de seguridad GeoServer
Introducción al complemento de seguridad GeoServer OAuth2
Configuración del
Servicio de rol REST de GeoNodeConfiguración del
Filtro de autenticación GeoNode OAuth2Las cadenas de filtros de autenticación de GeoServer
Introducción al complemento GeoFence, el marco de seguridad avanzado para GeoServer
Solución de problemas y funciones avanzadas:
Problemas comunes y soluciones
Cómo configurar puntos finales seguros
HTTPSFunciones avanzadas de GeoFence
Introducción¶
GeoServer, es decir, el servidor backend geoespacial de GeoNode, es un servidor espacial que necesita usuarios autenticados para acceder a recursos protegidos o funciones de administración.
GeoServer admite varios tipos de mecanismos de autenticación y autorización.Esos sistemas son conectables y GeoServer puede usarlos al mismo tiempo mediante el uso de una Cadena de filtros.Brevemente, este mecanismo permite a GeoServer verificar diferentes protocolos A&A uno por uno.GeoServer utiliza la primera coincidencia para autorizar a los usuarios.
La autenticación GeoNode se basa de forma predeterminada en el subsistema de seguridad Django.La autenticación de Django permite a GeoNode administrar sus usuarios, grupos, roles y sesiones internos.
GeoNode tiene algunos componentes externos, como GeoServer o QGis Server, que son servicios conectables e independientes, dedicados a la gestión de datos geoespaciales.Esos servicios externos tienen sus propios mecanismos de autenticación y autorización que deben sincronizarse de alguna manera con el de GeoNode.Además, esos servicios externos mantienen, en la mayoría de los casos y a menos que una configuración específica no lo desactive, un acceso de seguridad alternativo que, por ejemplo, permite a GeoNode modificar el catálogo geoespacial bajo el capó, o que un administrador del sistema tenga acceso independiente y privilegiado a los servidores.
Antes de profundizar en cómo funciona GeoServer/GeoNode A&A y cómo se puede configurar para que funcione correctamente con GeoNode, aclaremos rápidamente la diferencia entre los conceptos de Autenticación y Autorización.
Autenticación¶
La autenticación es el proceso de verificar la identidad de alguien mediante el uso de algún tipo de credenciales y un protocolo de protocolo de enlace.Si las credenciales son válidas, se inicia el proceso de autorización.El proceso de autenticación siempre continúa con el proceso de autorización (aunque a menudo pueden parecer combinados).Los dos términos se utilizan a menudo como sinónimos, pero son dos procesos diferentes.
Para obtener más detalles y explicaciones sobre los conceptos de autenticación, consulte aquí.
Autorización¶
La autorización es el proceso de permitir que los usuarios autenticados accedan a recursos protegidos verificando sus roles y derechos con algún tipo de mecanismo o protocolo de reglas de seguridad.En otras palabras, permite controlar los derechos de acceso otorgando o denegando permisos específicos a usuarios autorizados específicos.
Backend de seguridad de GeoNode¶
Autenticación de DJango¶
El sistema de autenticación de Django maneja tanto la autenticación como la autorización.
El sistema de autenticación consta de:
Usuarios
Permisos: indicadores binarios (sí/no) que designan si un usuario puede realizar una determinada tarea.
Grupos: una forma genérica de aplicar etiquetas y permisos a más de un usuario.
Un sistema de hash de contraseñas configurable
Formularios y herramientas de visualización para iniciar sesión como usuario o restringir contenido
Un sistema backend conectable
El sistema de autenticación en Django pretende ser muy genérico y no proporciona algunas características que se encuentran comúnmente en los sistemas de autenticación web.Se han implementado soluciones para algunos de estos problemas comunes en paquetes de terceros:
Comprobación de seguridad de la contraseña
Limitación de intentos de inicio de sesión
Autenticación frente a terceros (OAuth, por ejemplo)
Nota
Para obtener más detalles sobre la instalación y configuración del sistema de autenticación Django, consulte la guía oficial https://docs.djangoproject.com/en/3.2/topics/auth/.
GeoNode se comunica con GeoServer a través de Autenticación Básica interna, para poder configurar los datos y el catálogo de GeoServer.
Para hacer esto, debe asegurarse de que GeoNode conozca el usuario administrador interno y la contraseña de GeoServer.
Advertencia
Debe ser un usuario interno de GeoServer con derechos de administrador, no uno de GeoNode.
Asegúrese de que las credenciales estén configuradas correctamente en el archivo settings.py
SERVIDOR_OGC¶
Asegúrese de que la configuración de OGC_SERVER esté configurada correctamente.
Observe que las dos propiedades LOGIN_ENDPOINT y LOGOUT_ENDPOINT deben especificar los puntos finales de GeoServer OAuth2 (consulte los detalles a continuación).Los valores predeterminados 'j_spring_oauth2_geonode_login' y 'j_spring_oauth2_geonode_logout' funcionan en la mayoría de los casos, a menos que necesites algún punto final específico diferente al anterior.En cualquier caso, esos valores deben ser coherentes con la configuración del complemento GeoServer OAuth2.
En caso de duda, utilice los valores predeterminados que aparecen a continuación.
Los valores predeterminados son:
...
# OGC (WMS/WFS/WCS) Server Settings
# OGC (WMS/WFS/WCS) Server Settings
OGC_SERVER = {
'default': {
'BACKEND': 'geonode.geoserver',
'LOCATION': GEOSERVER_LOCATION,
'LOGIN_ENDPOINT': 'j_spring_oauth2_geonode_login',
'LOGOUT_ENDPOINT': 'j_spring_oauth2_geonode_logout',
# PUBLIC_LOCATION needs to be kept like this because in dev mode
# the proxy won't work and the integration tests will fail
# the entire block has to be overridden in the local_settings
'PUBLIC_LOCATION': GEOSERVER_PUBLIC_LOCATION,
'USER': 'admin',
'PASSWORD': 'geoserver',
'MAPFISH_PRINT_ENABLED': True,
'PRINT_NG_ENABLED': True,
'GEONODE_SECURITY_ENABLED': True,
'WMST_ENABLED': False,
'BACKEND_WRITE_ENABLED': True,
'WPS_ENABLED': False,
'LOG_FILE': '%s/geoserver/data/logs/geoserver.log' % os.path.abspath(os.path.join(PROJECT_ROOT, os.pardir)),
# Set to name of database in DATABASES dictionary to enable
'DATASTORE': '', # 'datastore',
'TIMEOUT': 10 # number of seconds to allow for HTTP requests
}
}
...
Interacción GeoNode y GeoServer A&A¶
La instancia de GeoServer utilizada por GeoNode tiene una configuración particular que permite que los dos marcos interactúen e intercambien correctamente información sobre las credenciales y permisos de los usuarios.
En particular, GeoServer está configurado con una Cadena de filtros para autorización que hace uso de los dos protocolos siguientes:
- Autenticación básica;este es el mecanismo de autenticación de GeoServer predeterminado.Esto hace uso de rfc2617 - Autenticación de acceso básico y implícito para verificar las credenciales del usuario.
En otras palabras, GeoServer toma un
nombre de usuarioy unacontraseñacodificada en Base64 en los encabezados de solicitud HTTP y los compara con su base de datos interna (que de forma predeterminada es un archivo XML cifrado en el directorio de datos de GeoServer).Si las credenciales del usuario coinciden, entonces GeoServer verifica la autorización a través de susServicios de rol(veremos esos servicios en detalle en la sección GeoServer (Backend de seguridad) a continuación).Nota
GeoServer se envía de forma predeterminada con
adminygeoservercomo nombre de usuario y contraseña de administrador predeterminados.Antes de poner en línea el GeoServer es imperativo cambiar al menos la contraseña del administrador.Autenticación OAuth2;este módulo permite a GeoServer autenticarse contra el Protocolo OAuth2.Si la autenticación básica falla, GeoServer recurre a ella utilizando GeoNode como proveedor OAuth2 de forma predeterminada.
Nota
Se pueden encontrar más detalles directamente en la documentación oficial de GeoServer en la sección «Cadena de autenticación»
Desde el lado del backend (servidor) de GeoNode, el servidor utilizará la Autenticación básica con credenciales de administrador para configurar el catálogo de GeoServer.GeoNode debe poder acceder a GeoServer, por supuesto, y GeoNode debe conocer las credenciales de administrador internas de GeoServer.
Desde el lado del frontend de GeoNode (navegador y GUI), el objetivo de Autenticación es permitir que GeoServer reconozca como válido a un usuario que ya ha iniciado sesión en GeoNode, proporcionando una especie de mecanismo SSO entre las dos aplicaciones.
GeoServer debe conocer y poder acceder a GeoNode a través de HTTP/HTTPS.En otras palabras, un usuario externo conectado a GeoNode debe autenticarse en GeoServer con los mismos permisos.Esto es posible a través del protocolo Autenticación OAuth2.
Mecanismo de autenticación de GeoNode/GeoServer
GeoNode como proveedor OAuth2 (OP)
OpenID Connect es un marco de identidad creado sobre el protocolo OAuth 2.0 que amplía la autorización de los procesos OAuth 2.0 para implementar su mecanismo de autenticación.OpenID Connect agrega un mecanismo de descubrimiento que permite a los usuarios utilizar una autoridad confiable externa como proveedor de identidad.Desde otro punto de vista, esto puede verse como un sistema de inicio de sesión único (SSO).
OAuth 2.0 es un marco de autorización que es capaz de proporcionar una forma para que los clientes accedan a un recurso con acceso restringido en nombre del propietario del recurso.OpenID Connect permite a los clientes verificar a los usuarios con una autenticación basada en un servidor de autorización.
Como OP, GeoNode podrá actuar como proveedor de identidad confiable, permitiendo así que el sistema funcione en un entorno aislado y/o permitir que GeoNode autentique a usuarios privados administrados por el subsistema de autenticación local de DJango.
GeoServer como parte de confianza (RP) de OAuth2
Gracias a la Autenticación OAuth2, GeoServer puede recuperar la identidad de un usuario final directamente desde el Proveedor OAuth2 (OP).
Con GeoNode actuando como OP, el mecanismo evitará el uso de cookies confiando, en cambio, en el protocolo seguro OAuth2.
Cómo funciona el protocolo OAuth2:
![]()
La parte que confía envía la solicitud al proveedor de OAuth2 para autenticar al usuario final.
El proveedor de identidad OAuth2 autentica al usuario
El proveedor de OAuth2 envía el token de identificación y el token de acceso a la parte de confianza
La parte que confía envía una solicitud al usuario info punto final con el token de acceso recibido del proveedor OAuth2
La información del usuario punto final devuelve los reclamos.
Mecanismo de autorización de GeoNode/GeoServer
Sin embargo, permitir que GeoServer utilice OAuth2 para actuar como RP OAuth2 no es suficiente para asignar una identidad de usuario a sus roles.
En el lado de GeoServer, todavía necesitaremos un
RoleServiceque pueda comunicarse con GeoNode y transformar los tokens en un usuario principal para usar dentro del propio subsistema de seguridad de GeoServer.En otras palabras, después de una autenticación exitosa, GeoServer necesita autorizar al usuario para comprender a qué recursos puede acceder o no.Un
RoleService basado en RESTen el lado de GeoNode permite que GeoServer se comunique con GeoNode a través de REST para obtener el usuario actual junto con la lista de sus roles.Sin embargo, conocer los Roles asociados a un usuario no es suficiente.La Autorización completa del GeoServer necesita capturar un conjunto de
Reglas de Acceso, asociadas a los Roles, para establecer qué recursos y datos son accesibles por el usuario.La autorización de GeoServer se basa únicamente en roles, por lo tanto, para cada usuario autenticado también necesitamos saber:
Los Roles asociados a una sesión de usuario válida
Los permisos de acceso asociados a un recurso GeoServer
El mecanismo de autenticación anterior permite a GeoServer obtener información sobre el usuario y sus roles, lo que aborda el punto 1.
Respecto al punto 2, GeoServer utiliza el complemento GeoFence Embedded Server.GeoFence es una aplicación web Java que proporciona un motor de autenticación/autorización avanzado para GeoServer utilizando la interfaz descrita en aquí.GeoFence tiene su propia base de datos de reglas para la gestión de reglas de autorización y anula el sistema de gestión de seguridad estándar de GeoServer mediante la implementación de un sofisticado administrador de acceso a recursos.Por último, pero no por último, GeoFence implementa y expone una API REST que permite a los clientes remotos autorizados leer/escribir/modificar reglas de seguridad.
Las ventajas de utilizar dicho complemento son múltiples:
Las reglas de Autorizaciones tienen una granularidad fina.Las reglas de seguridad son manejadas por GeoFence de manera similar a las de iptables, y permiten definir restricciones de seguridad incluso en subregiones y atributos de capas.
GeoFence expone una interfaz REST a su base de datos de reglas interna, lo que permite a los administradores externos actualizar las restricciones de seguridad mediante programación.
GeoFence implementa un mecanismo de almacenamiento en caché interno que mejora considerablemente el rendimiento bajo carga.
Interacción del GeoNode con GeoFence
El propio GeoNode puede enviar/administrar reglas de autorización a GeoServer a través de GeoFence REST API, actuando como administrador de GeoServer.GeoNode configura correctamente las reglas de GeoFence en cualquier momento que sea necesario, es decir, los permisos de un Recurso/Capa se actualizan.
GeoServer debe conocer y poder acceder a GeoNode a través de HTTP/HTTPS.En otras palabras, un usuario externo conectado a GeoNode debe autenticarse en GeoServer con los mismos permisos.Esto es posible a través de GeoNodeCoockieProcessingFiler.
Resumiendo tendremos diferentes formas de acceder a las Capas de GeoNode:
A través de GeoNode mediante autenticación DJango y GeoNodeCoockieProcessingFiler;Básicamente los usuarios disponibles en GeoNode también son válidos para GeoServer o cualquier otro backend.
Advertencia
Si un usuario de GeoNode tiene derechos de «administrador», también podrá administrar GeoServer.
A través del Subsistema de Seguridad GeoServer;Siempre será posible acceder a GeoServer utilizando su sistema de seguridad interno y sus usuarios, a menos que esté explícitamente deshabilitado (advertencia esto es peligroso, debes saber lo que estás haciendo).
Veamos ahora en detalle cómo se configuran las piezas individuales y cómo se pueden configurar.
Configuración y configuración del kit de herramientas DJango OAuth¶
Como se indicó anteriormente, GeoNode utiliza el protocolo OAuth2 para todas las interacciones frontend con GeoServer.GeoNode debe configurarse como proveedor OAuth2 y proporcionar un ID de cliente y una clave Client Sercret a GeoServer.Esto es posible habilitando y configurando el Complemento Django OAuth Toolkit.
Advertencia
GeoNode y GeoServer no funcionarán en absoluto si no se ejecutan los siguientes pasos en la primera instalación.
Configuración de seguridad predeterminada settings.py para OAuth2¶
Verifique que el proveedor OAuth2 y el complemento de seguridad estén habilitados y que las configuraciones a continuación estén configuradas correctamente.
AUTH_IP_WHITELIST¶
La propiedad AUTH_IP_WHITELIST limita el acceso a usuarios/grupos REST Role Service punto finals a las únicas direcciones IP incluidas en la lista blanca.Lista vacía significa «permitir todo».Si necesita limitar las llamadas REST “api” solo a algunas IP específicas, complete la lista de esta manera: AUTH_IP_WHITELIST = ['192.168.1.158', '192.168.1.159']
Los valores predeterminados son:
...
AUTH_IP_WHITELIST = []
...
INSTALLED_APPS¶
Para permitir que GeoNode actúe como proveedor de OAuth2, necesitamos habilitar la aplicación DJango oauth2_provider proporcionada por el «Django OAuth Toolkit».
Los valores predeterminados son:
...
INSTALLED_APPS = (
'modeltranslation',
...
'guardian',
'oauth2_provider',
...
) + GEONODE_APPS
...
MIDDLEWARE_CLASSES¶
Instalar la aplicación DJango oauth2_provider` no es suficiente para habilitar la funcionalidad completa.También necesitamos que GeoNode incluya entidades adicionales en su modelo interno.
Los valores predeterminados son:
...
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# The setting below makes it possible to serve different languages per
# user depending on things like headers in HTTP requests.
'django.middleware.locale.LocaleMiddleware',
'pagination.middleware.PaginationMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# If you use SessionAuthenticationMiddleware, be sure it appears before OAuth2TokenMiddleware.
# SessionAuthenticationMiddleware is NOT required for using django-oauth-toolkit.
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'oauth2_provider.middleware.OAuth2TokenMiddleware',
)
...
AUTHENTICATION_BACKENDS¶
Para permitir que GeoNode actúe como proveedor de OAuth2, necesitamos habilitar el backend de DJango oauth2_provider.backends.OAuth2Backend proporcionado por el «Django OAuth Toolkit».También tenga en cuenta que debemos especificar los alcances del proveedor OAuth2 y declarar qué «generador» usar para crear «ID de cliente OAuth2».
Los valores predeterminados son:
...
# Replacement of default authentication backend in order to support
# permissions per object.
AUTHENTICATION_BACKENDS = (
'oauth2_provider.backends.OAuth2Backend',
'django.contrib.auth.backends.ModelBackend',
'guardian.backends.ObjectPermissionBackend',
)
OAUTH2_PROVIDER = {
'SCOPES': {
'read': 'Read scope',
'write': 'Write scope',
'groups': 'Access to your groups'
},
'CLIENT_ID_GENERATOR_CLASS': 'oauth2_provider.generators.ClientIdGenerator',
}
...
Configuración de administración del kit de herramientas Django OAuth¶
Una vez que settings.py y local_settings.py se hayan configurado correctamente para su sistema:
Complete los pasos de configuración de GeoNode
preparar el modelo
python manage.py makemigrations python manage.py migrate python manage.py syncdb
Preparar los datos estáticos.
python manage.py collectstatic
Asegúrese de que la base de datos se haya completado con los datos predeterminados iniciales.
Advertencia
En desuso este comando será reemplazado por migraciones en el futuro, así que tenga cuidado.
python manage.py loaddata initial_data.json
Asegúrese de que exista un superusuario para su entorno
Advertencia
En desuso este comando será reemplazado por migraciones en el futuro, así que tenga cuidado.
python manage.py createsuperuser
Nota
Lea los tutoriales básicos en la documentación de GeoNode Developer para obtener detalles sobre los comandos específicos y cómo usarlos.
Iniciar la aplicación
Inicie GeoNode de acuerdo con cómo se realizó la configuración;ejecute el modo de depuración a través de
paver, o mediante proxy mediante un servidor HTTP como Apache2 HTTPD, Nginx u otros.Finalice la configuración del proveedor OAuth2
En primer lugar, debe configurar y crear una nueva aplicación OAuth2 llamada
GeoServera través del panel de administración de GeoNode.Acceda al panel de administración de GeoNode
Vaya a
Django OAuth Toolkit>Aplicaciones
Actualizar o crear la Aplicación denominada
GeoServerAdvertencia
El nombre de la aplicación debe ser
GeoServer
Identificación del cliente;Un código alfanumérico que representa el ID del cliente OAuth2.El complemento GeoServer OAuth2 utilizará este** valor.Advertencia
En un entorno de producción, se recomienda altamente modificar el valor predeterminado proporcionado con la instalación de GeoNode.
Usuario;Busque el usuarioadmin.SuIDse actualizará automáticamente en el formulario.Redirigir URL;Es posible especificar muchos URI aquí.Estos deben coincidir con los URI de las instancias de GeoServer.Tipo de cliente;ElijaConfidencialTipo de concesión de autorización;ElijaCódigo de autorizaciónSecreto del cliente;Un código alfanumérico que representa el secreto del cliente OAuth2.El complemento GeoServer OAuth2 utilizará este** valor.Advertencia
En un entorno de producción, se recomienda altamente modificar el valor predeterminado proporcionado con la instalación de GeoNode.
Nombre;**Debe** serGeoServer
Backend de seguridad de GeoServer¶
Subsistema de seguridad GeoServer¶
GeoServer tiene un subsistema de seguridad robusto, inspirado en Spring Security.La mayoría de las funciones de seguridad están disponibles a través de la interfaz de administración web.
Para obtener más detalles sobre cómo funciona y cómo configurarlo y modificarlo, consulte la guía oficial de GeoServer http://docs.geoserver.org/stable/en/user/security/webadmin/index.html
Al utilizar el GeoServer Data Dir proporcionado con la compilación GeoNode, la siguiente configuración ya está disponible.Sólo necesitará actualizarlos de acuerdo con su entorno (como direcciones IP y nombres de host, claves OAuth2 y cosas similares).Sin embargo, se recomienda leer atentamente los siguientes pasajes para comprender exactamente cómo se configuran los diferentes componentes e identificar fácilmente cualquier posible problema durante la implementación.
Los principales temas de esta sección son:
Conexión al servicio de rol REST de GeoNode
Configuración del filtro de autenticación GeoServer OAuth2
Configuración de las cadenas de filtros del GeoServer
Configuración y prueba del servidor GeoFence y reglas predeterminadas
Conexión al servicio de rol REST de GeoNode¶
Controles preliminares¶
GeoServer está en funcionamiento y usted tiene derechos de administrador
GeoServer debe llegar a la instancia de GeoNode a través de HTTP
Se debe permitir que la dirección IP del host de GeoServer acceda a las API del servicio de rol de GeoNode (consulte la sección
AUTH_IP_WHITELISTmás arriba)
Configuración del servicio de rol REST de GeoNode¶
Inicie sesión como
adminen la GUI de GeoServerAdvertencia
En un sistema de producción recuerde cambiar las credenciales de administrador predeterminadas
admingeoserver
Accede a la sección
Seguridad>Usuarios, Grupos, Roles
Si aún no está configurado el servicio
servicio de rol REST de geonode, haga clic enServicios de rol>Agregar nuevoNota
Este pasaje no es necesario si el
servicio de rol REST del geonodeya se ha creado.Si es así, se mostrará en la lista de Servicios de rol.
Si aún no está configurado el servicio
geonode REST role service, elijaAuthKEY REST - Role service from REST punto final
Cree/actualice el
servicio de rol REST de geonodeen consecuencia
Nombre;**Debe** serservicio de rol REST de geonodeURL del servidor base;Debe apuntar a la URL base de la instancia de GeoNode (por ejemplo,http://<geonode_host_url>)Roles Punto final REST;Ingrese/api/rolesPunto final REST de función de administrador;Ingrese/api/adminRolePunto final REST de usuarios;Ingrese/api/usuariosRuta JSON de roles;Ingrese$.gruposRuta JSON del rol de administrador;Introduzca$.adminRoleRuta JSON de usuarios;Ingrese$.usuarios[0].grupos
Una vez que todo haya sido configurado y esté funcionando, elija
Rol de administradoryRol de administrador de grupocomoROLE_ADMIN
Permitir que GeoFence valide reglas con ROLES¶
Advertencia
Las siguientes instrucciones son diferentes según la versión de GeoServer que esté utilizando actualmente.
GeoServer 2.9.x y 2.10.x¶
Accede a la sección
Seguridad>Configuración
Elija el
servicio de rol REST de geonodecomoservicio de rol activo
GeoServer 2.12.x y superior¶
Con las últimas actualizaciones del complemento GeoFence, este último ya no reconoce el servicio de rol desde la configuración predeterminada, sino desde el archivo geofence-server.properties.
Dicho esto, es importante que el servicio de función Seguridad > Configuración esté configurado en predeterminado, para permitir que GeoServer siga la cadena de autorización estándar.
Por otro lado, deberá asegurarse de que el archivo geofence-server.properties en la carpeta $GEOSERVER_DATA_DIR/geofence contenga las siguientes dos propiedades adicionales:
gwc.context.suffix=gwc
org.geoserver.rest.DefaultUserGroupServiceName=geonode REST role service
Configuración del filtro de autenticación GeoServer OAuth2¶
Ahora es necesario verificar que GeoServer pueda conectarse a proveedores OAuth2 (específicamente a GeoNode OP) y poder autenticar usuarios a través de él.
Controles preliminares¶
GeoServer está en funcionamiento y usted tiene derechos de administrador
GeoServer debe llegar a la instancia de GeoNode a través de HTTP
OAuth2
Client IDyClient Secretse han generado en GeoNode y se conocen
Configuración del filtro de seguridad GeoNode OAuth2¶
Accede a la sección
Seguridad>Autenticación
Si aún no está configurado el filtro de autenticación
geonode-oauth2 - Autenticación usando un GeoNode OAuth2, haga clic enFiltros de autenticación>Agregar nuevoNota
Este pasaje no es necesario si ya se ha creado
geonode-oauth2 - Autenticación mediante un GeoNode OAuth2.Si es así, se mostrará entre la lista de filtros de autenticación.
Si aún no está configurado el filtro de autenticación
geonode-oauth2 - Autenticación usando un GeoNode OAuth2, elijaGeoNode OAuth2 - Se autentica buscando una clave de token de acceso de GeoNode OAuth2 válida enviada como parámetro de URL
Cree/actualice
geonode-oauth2 - Autenticación usando un GeoNode OAuth2en consecuencia
Nombre;**Debe** sergeonode-oauth2Habilitar punto de entrada de autenticación de redireccionamiento;Se recomienda poner esto enFalse; de lo contrario, GeoServer no le permitirá conectarse a su GUI de administración a través delFormulario, sino solo a través de GeoNode.Punto final de autenticación de inicio de sesión;A menos que tenga necesidades específicas, mantenga el valor predeterminado/j_spring_oauth2_geonode_loginPunto final de autenticación de cierre de sesión;A menos que tenga necesidades específicas, mantenga el valor predeterminado/j_spring_oauth2_geonode_logoutForzar acceso al token URI HTTPS Protocolo seguro;Esto debe ser «Falso» a menos que haya habilitado una «Conexión segura» en GeoNode.En ese caso, deberá confiar en elCertificadode GeoNode en el almacén de claves JVM de GeoServer.Por favor vea los detalles a continuaciónURI del token de acceso;Establezca esto enhttp://<geonode_host_base_url>/o/token/Forzar autorización de usuario URI HTTPS Protocolo seguro;Esto debe ser «Falso» a menos que haya habilitado una «Conexión segura» en GeoNode.En ese caso, deberá confiar en elCertificadode GeoNode en el almacén de claves JVM de GeoServer.Por favor vea los detalles a continuaciónURI de autorización de usuario;Establezca esto enhttp://<geonode_host_base_url>/o/authorize/Redireccionar URI;Establezca esto enhttp://<geoserver_host>/geoserver.Esta dirección debe estar presente enRedirect urisde GeoNodeOAuth2>Aplicaciones>GeoServer(ver arriba)Verificar URL del punto final del token;Establezca esto enhttp://<geonode_host_base_url>/api/o/v4/tokeninfo/URI de cierre de sesión;Establezca esto enhttp://<geonode_host_base_url>/account/logout/Alcances;A menos que tenga necesidades específicas, mantenga el valor predeterminadolectura, escritura, gruposID de cliente;La clave alfanuméricaClient idgenerada por el GeoNodeOAuth2>Aplicaciones>GeoServer(ver arriba)Secreto del cliente;La clave alfanuméricaClient secretgenerada por el GeoNodeOAuth2>Aplicaciones>GeoServer(ver arriba)Fuente de rol;Para autorizar al usuario contra GeoNode, elijaServicio de rol>Servicio de rol REST de geonode
Configuración de las cadenas de filtros del GeoServer¶
Los siguientes pasos garantizan que GeoServer pueda adoptar más métodos de autenticación.Como se indicó anteriormente, es posible autenticarse en GeoServer utilizando diferentes protocolos.
GeoServer escanea la cadena de filtros de autenticación asociada a la ruta especificada y los prueba uno por uno de forma secuencial.El primero que coincide con el protocolo y puede otorgar acceso al usuario, rompe el ciclo creando un User Principal e inyectándolo en el GeoServer SecurityContext.El proceso de Autenticación entonces termina aquí y el control pasa al de Autorización, el cual intentará recuperar los Roles del usuario autenticado a través de los Servicios de Roles GeoServer disponibles asociados al Filtro de Autenticación que otorgó el acceso.
Controles preliminares¶
GeoServer está en funcionamiento y usted tiene derechos de administrador
GeoServer debe llegar a la instancia de GeoNode a través de HTTP
El filtro de autenticación
geonode-oauth2 - Autenticación mediante un GeoNode OAuth2y elservicio de rol REST geonodese han configurado correctamente
Configuración de las cadenas de filtros de GeoServer¶
Accede a la sección
Seguridad>Autenticación
Identificar la sección
Cadenas de filtros
Asegúrese de que la cadena de filtros
webesté configurada como se muestra a continuación
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Asegúrese de que la cadena de filtros
restesté configurada como se muestra a continuación
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Asegúrese de que la cadena de filtros
gwcesté configurada como se muestra a continuación
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Asegúrese de que la cadena de filtros
predeterminadaesté configurada como se muestra a continuación
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Agregue los
Puntos finales de inicio de sesión de GeoNodea la lista delimitada por comas de la cadena de filtroswebLogin
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Agregue los
Puntos finales de cierre de sesión de GeoNodea la lista delimitada por comas de la cadena de filtroswebLogout
Advertencia
Cada vez que modifiques una cadena de filtros, no olvides guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Agregue los
Puntos finales de cierre de sesión de GeoNodea la lista delimitada por comas del nodo XMLformLogoutChainen<GEOSERVER_DATA_DIR>/security/filter/formLogout/config.xmlNecesitará un editor de texto para modificar el archivo.
Nota
Si el nodo XML
<formLogoutChain>no existe en absoluto, cree uno nuevo como se especifica a continuación<logoutFilter> ... <redirectURL>/web/</redirectURL> <formLogoutChain>/j_spring_security_logout,/j_spring_security_logout/,/j_spring_oauth2_geonode_logout,/j_spring_oauth2_geonode_logout/</formLogoutChain> </logoutFilter>
Advertencia
El valor
j_spring_oauth2_geonode_logoutdebe ser el mismo especificado queLogout Authentication EndPointengeonode-oauth2 - Autenticación usando un GeoNode OAuth2anterior.
Configuración y prueba del servidor GeoFence y reglas predeterminadas¶
Para funcionar correctamente, GeoServer necesita que el complemento GeoFence Embedded Server esté instalado y configurado en el sistema.
La configuración de GeoServer proporcionada para GeoNode tiene el complemento ya instalado con una configuración predeterminada.En ese caso, verifique que el complemento funcione correctamente y que las reglas predeterminadas se hayan configurado siguiendo los siguientes pasos.
Controles preliminares¶
GeoServer está en funcionamiento y usted tiene derechos de administrador
El complemento GeoFence Embedded Server se ha instalado en GeoServer
Configuración de las cadenas de filtros de GeoServer¶
Accede a la sección
Seguridad>Autenticación
Identifique la sección
Proveedores de autenticacióny asegúrese de que el Proveedor de autenticacióngeofenceesté presente
Asegúrese de que la
Cadena de proveedoresesté configurada como se muestra a continuación
Advertencia
Cada vez que modifique un proveedor de autenticación, no olvide guardar la configuración de
Autenticación.Esto debe hacerse para cada cambio.
Configuración del servidor GeoFence y reglas¶
Asegúrese de que el servidor GeoFence funcione y que la configuración predeterminada esté configurada correctamente
Accede a la sección
Seguridad>GeoFence
Asegúrese de que las
Opcionesestén configuradas de la siguiente manera y que el servidor funcione bien al realizar unaConexión de prueba
Permitir capas remotas y en línea en SLD;Configúrelo enVerdaderoPermitir parámetros SLD y SLD_BODY en solicitudes;Configúrelo enVerdaderoLos usuarios autenticados pueden escribir;Configúrelo enVerdaderoUtilice roles de GeoServer para obtener autorizaciones;Configúrelo enFalso
Verifique las reglas predeterminadas de GeoFence
Accede a la sección
Seguridad>Reglas de datos de GeoFence
Asegúrese de que la regla
DENEGAR TODOesté presente de forma predeterminada; de lo contrario, todos podrán acceder a sus datos.Nota
Esta regla es siempre la última
Advertencia
Si esa regla no existe en la parte inferior (esta regla es siempre la última), agréguela manualmente.
Access the
Security>GeoFence Admin Rulessection
No se necesitan reglas aquí
Solución de problemas y funciones avanzadas¶
Problemas comunes y soluciones¶
GeoServer/GeoNode OAuth2 no se autentica como administrador incluso utilizando usuarios
adminde GeoNodeSymptoms
Al intentar autenticarme con un usuario
adminusando OAuth2, el proceso redirige correctamente a la página de GeoServer, pero no soy un administrador de GeoServer.Causa
Eso significa que de alguna manera GeoServer no pudo completar exitosamente el proceso de Autorización y Autenticación.
Las posibles causas del problema pueden ser las siguientes:
La autenticación OAuth2 falla en el lado de GeoServer
Esto generalmente se debe a una excepción al intentar completar el proceso de autenticación.
Una causa típica es que GeoServer intenta utilizar conexiones HTTPS pero no se confía en el certificado de GeoNode;
En ese caso, consulte la sección siguiente.También eche un vistazo a los registros (en particular el de GeoServer) como se explica en debug_geonode.Los registros de GeoServer deben contener una excepción detallada que explique la causa del problema.Si no aparece ninguna excepción aquí (incluso después de elevar el nivel de registro a DEBUG), intente verificar el servicio de rol GeoNode como se explica a continuación.
Otro posible problema es que de alguna manera el protocolo de enlace OAuth2 no se puede completar exitosamente;
Inicie sesión en GeoServer como administrador a través de su formulario de inicio de sesión WEB.
Verifique que todos los parámetros
geonode-oauth2 - Autenticación usando un GeoNode OAuth2sean correctos.Si todo está bien, eche un vistazo a los registros (en particular el de GeoServer) como se explica en debug_geonode.Los registros de GeoServer deben contener una excepción detallada que explique la causa del problema.Si no aparece ninguna excepción aquí (incluso después de elevar el nivel de registro a DEBUG), intente verificar el servicio de rol GeoNode como se explica a continuación.
GeoServer no puede recuperar la función del usuario de un servicio de función
Siempre verifique dos veces el registro del servidor HTTP y del GeoServer como se especifica en la sección debug_geonode.Esto podría guiarlo directamente a la causa del problema.
Verifique que el host de GeoServer tenga permiso para acceder a las API REST del servicio de rol de GeoNode en
AUTH_IP_WHITELISTdesettings.pyCompruebe que el
servicio de rol REST geonodesea el servicio de rol predeterminado y que el complemento GeoServer OAuth2 se haya configurado para usarlo de forma predeterminada.Verifique que las API del servicio de rol REST de GeoNode sean funcionales y produzcan JSON correcto.
Esto es posible usando simples llamadas GET
cUrlcomocurl http://localhost/api/adminRole $> {"adminRole": "admin"} curl http://localhost/api/users $> {"users": [{"username": "AnonymousUser", "groups": ["anonymous"]}, {"username": "afabiani", "groups": ["anonymous", "test"]}, {"username": "admin", "groups": ["anonymous", "test", "admin"]}]} curl http://localhost/api/roles $> {"groups": ["anonymous", "test", "admin"]} curl http://localhost/api/users/admin $> {"users": [{"username": "admin", "groups": ["anonymous", "test", "admin"]}]}
Cómo configurar puntos finales seguros HTTPS¶
En un sistema de producción es una buena práctica cifrar la conexión entre GeoServer y GeoNode.Esto sería posible habilitando el protocolo HTTPS en las API del servicio de función REST de GeoNode y en los puntos finales OAuth2.
La mayoría de las veces dependerá de una conexión HTTPS autofirmada mediante un certificado generado.Eso hace que la conexión no sea de confianza y deberá indicarle a la máquina virtual Java GeoServer que confíe en ella.
Esto se puede hacer siguiendo los pasos a continuación.
Para cualquier problema, consulte los registros (en particular el de GeoServer) como se explica en debug_geonode.Los registros de GeoServer deben contener una excepción detallada que explique la causa del problema.
Certificados SSL de confianza¶
Cuando utilice un Keystore personalizado o intente acceder a un proveedor OAuth2 autofirmado o no confiable con protección SSL desde una conexión que no sea SSH, deberá agregar los certificados al Keystore de JVM.
Para poder realizar esto puedes seguir los siguientes pasos:
En este ejemplo vamos a
Recuperar certificado SSL del dominio GeoNode:
«URI del token de acceso» = https://<geonode_host_base_url>/o/token/, por lo tanto, debemos confiar en
https://<geonode_host_base_url>o (<geonode_host_base_url>:443)Nota
Deberá obtener y confiar en los certificados de cada URL HTTPS diferente utilizada en los puntos finales OAuth2.
Almacene certificados SSL en el disco duro local
Add SSL Certificates to the Java Keystore
Habilite la JVM para buscar certificados SSL desde el almacén de claves
Recuperar el certificado SSL del dominio GeoNode
Utiliza el comando
opensslpara volcar el certificadoPara
https://<geonode_host_base_url>openssl s_client -connect <geonode_host_base_url>:443
Almacenar el certificado SSL en el disco duro local
Copie y pegue la sección
-BEGIN CERTIFICATE-,-END CERTIFICATE-y guárdela en un archivo.certNota
El archivo
.certson archivos de texto sin formato que contienen los caracteres ASCII incluidos en las secciones-BEGIN CERTIFICATE-y-END CERTIFICATE-.geonode.cert(o el nombre que quieras con la extensión.cert)
Agregar certificados SSL al almacén de claves de Java
Puedes usar el comando Java
keytoolasígeonode.cert(o el nombre que quieras con la extensión.cert)keytool -import -noprompt -trustcacerts -alias geonode -file geonode.cert -keystore ${KEYSTOREFILE} -storepass ${KEYSTOREPASS}
o, alternativamente, puedes utilizar alguna herramienta gráfica que te ayude a administrar los certificados SSL y los almacenes de claves, como Portecle
java -jar c:\apps\portecle-1.9\portecle.jar
Habilite la JVM para buscar certificados SSL desde el almacén de claves
Para hacer esto, necesita pasar una
JAVA_OPTIONa su JVM:-Djavax.net.ssl.trustStore=F:\tmp\keystore.key
Reinicia tu servidor
Nota
A continuación, encontrarás un script bash que simplifica la importación de certificados SSL de Keystore. Úsalo cuando te resulte conveniente.
HOST=myhost.example.com
PORT=443
KEYSTOREFILE=dest_keystore
KEYSTOREPASS=changeme
# get the SSL certificate
openssl s_client -connect ${HOST}:${PORT} </dev/null \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ${HOST}.cert
# create a keystore and import certificate
keytool -import -noprompt -trustcacerts \
-alias ${HOST} -file ${HOST}.cert \
-keystore ${KEYSTOREFILE} -storepass ${KEYSTOREPASS}
# verify we've got it.
keytool -list -v -keystore ${KEYSTOREFILE} -storepass ${KEYSTOREPASS} -alias ${HOST}
Funciones avanzadas de GeoFence¶
Tutoriales y gestión de reglas de GeoFence¶
Este tutorial muestra cómo instalar y configurar el complemento Geofence Internal Server.Muestra cómo crear reglas de dos maneras: usando la GUI y los métodos REST.
Las reglas de GeoFence se pueden crear, actualizar o eliminar a través de una API REST, a la que solo puede acceder un usuario administrador de GeoServer.Puede encontrar más detalles sobre cómo funciona la API REST de GeoFence aquí.
Configuración de almacenamiento de reglas de GeoFence¶
De forma predeterminada, GeoFence está configurado para utilizar una base de datos basada en un sistema de archivos almacenado en el directorio de datos del GeoServer <GEOSERVER_DATA_DIR/geofence.
También es posible configurar GeoFence para utilizar una base de datos PostgreSQL/PostGIS externa. Para obtener más detalles, consulta la documentación oficial de GeoFence aquí here.
Agregue
Bibliotecas JavaaGeoServerwget --no-check-certificate "https://maven.geo-solutions.it/org/hibernatespatial/hibernate-spatial-postgis/1.1.3.2/hibernate-spatial-postgis-1.1.3.2.jar" -O hibernate-spatial-postgis-1.1.3.2.jar wget --no-check-certificate "https://repo1.maven.org/maven2/org/postgis/postgis-jdbc/1.3.3/postgis-jdbc-1.3.3.jar" -O postgis-jdbc-1.3.3.jar cp hibernate-spatial-postgis-1.1.3.2.jar <GEOSERVER_WEBAPP_DIR>/WEB-INF/lib cp postgis-jdbc-1.3.3.jar <GEOSERVER_WEBAPP_DIR>/WEB-INF/lib restart geoserver
Cree una base de datos con el esquema actualizado aquí https://github.com/geoserver/geofence/blob/master/doc/setup/sql/002_create_schema_postgres.sql o habilite la creación automática de hbm2ddl a través del archivo de configuración (consulte el paso
3)Nota
Observe que «actualizar» también crea las tablas si no existen.Sin embargo, en producción, sugeriría cambiarlo para «validar».
# If you want to create a new DB for GeoFence sudo -u postgres createdb -O geonode geofence; \ sudo -u postgres psql -d geofence -c 'CREATE EXTENSION postgis;'; \ sudo -u postgres psql -d geofence -c 'GRANT ALL ON geometry_columns TO PUBLIC;'; \ sudo -u postgres psql -d geofence -c 'GRANT ALL ON spatial_ref_sys TO PUBLIC;'; \ sudo -u postgres psql -d geofence -c 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO geonode;'
Agrega una configuración similar al ejemplo
geofence-datasource-ovr.propertiesque aparece a continuación (si está cargada como extensión GeoServer)<GEOSERVER_DATA_DIR>/geofence/geofence-datasource-ovr.properties
# /* (c) 2019 Open Source Geospatial Foundation - all rights reserved # * This code is licensed under the GPL 2.0 license, available at the root # * application directory. # */ # geofenceVendorAdapter.databasePlatform=org.hibernate.spatial.dialect.postgis.PostgisDialect geofenceDataSource.driverClassName=org.postgresql.Driver geofenceDataSource.url=jdbc:postgresql://localhost:5432/geofence geofenceDataSource.username=postgres geofenceDataSource.password=postgres geofenceEntityManagerFactory.jpaPropertyMap[hibernate.default_schema]=public geofenceDataSource.testOnBorrow=true geofenceDataSource.validationQuery=SELECT 1 geofenceEntityManagerFactory.jpaPropertyMap[hibernate.testOnBorrow]=true geofenceEntityManagerFactory.jpaPropertyMap[hibernate.validationQuery]=SELECT 1 geofenceDataSource.removeAbandoned=true geofenceDataSource.removeAbandonedTimeout=60 geofenceDataSource.connectionProperties=ApplicationName=GeoFence; ################################################################################ ## Other setup entries ################################################################################ ## hbm2ddl.auto may assume one of these values: ## - validate: validates the DB schema at startup against the internal model. May fail on oracle spatial. ## - update: updates the schema, according to the internal model. Updating automatically the production DB is dangerous. ## - create-drop: drop the existing schema and recreates it according to the internal model. REALLY DANGEROUS, YOU WILL LOSE YOUR DATA. ## You may want not to redefine the property entirely, in order to leave the default value (no action). geofenceEntityManagerFactory.jpaPropertyMap[hibernate.hbm2ddl.auto]=update geofenceEntityManagerFactory.jpaPropertyMap[javax.persistence.validation.mode]=none geofenceEntityManagerFactory.jpaPropertyMap[hibernate.validator.apply_to_ddl]=false geofenceEntityManagerFactory.jpaPropertyMap[hibernate.validator.autoregister_listeners]=false ## ## ShowSQL is set to true in the configuration file; putting showsql=false in ## this file, you can easily check that this override file has been properly applied. # geofenceVendorAdapter.generateDdl=false # geofenceVendorAdapter.showSql=false ## Set to "true" in specific use cases # workspaceConfigOpts.showDefaultGroups=false ################################################################################ ## Disable second level cache. ## This is needed in a geofence-clustered environment. #geofenceEntityManagerFactory.jpaPropertyMap[hibernate.cache.use_second_level_cache]=false ################################################################################ ## Use external ehcache configuration file. ## Useful to change cache settings, for example diskStore path. #geofenceEntityManagerFactory.jpaPropertyMap[hibernate.cache.provider_configuration_file_resource_path]=file:/path/to/geofence-ehcache-override.xml