概述¶
TODO *
姜戈¶
TODO
WebServers¶
TODO
阿帕奇¶
TODO
NGINX¶
TODO
GeoServer¶
TODO
数据库¶
TODO
OAuth2安全性:身份验证和授权¶
GeoNode通过基于OAuth2协议和GeoFence的高级安全机制与Geoserver交互。本节将逐步介绍GeoNode和Geoserver高级安全性的配置和设置。
我们将在本节中看到的内容是:
Introduction
GeoNode (安全后台):
Django身份验证
Django OAuth工具包设置和配置
有关以下内容的详细信息
settings.py
安全设置
GeoServer (安全后台):
Geoserver安全子系统
Geoserver OAuth2安全插件简介
配置
GeoNode REST Role Service
配置
GeoNode OAuth2 Authentication Filter
Geoserver认证过滤连锁店
Geoserver高级安全框架GeoFence插件简介
故障排除和高级功能 :
常见问题和修复
如何设置
HTTPS
安全终端GeoFence高级功能
引言¶
Geoserver,即GeoNode的地理空间后端服务器,是一个空间服务器,需要经过身份验证的用户才能访问受保护的资源或管理功能。
Geoserver支持多种身份验证和授权机制。这些系统是可插拔的,Geoserver可以通过使用 Filter Chain
。简而言之,此机制允许Geoserver逐个检查不同的A&A协议。Geoserver使用第一个匹配对用户进行授权。
GeoNode身份验证默认基于Django安全子系统。Django身份验证允许GeoNode管理其内部用户、组、角色和会话。
GeoNode有一些外部组件,如Geoserver或QGIS Server,它们是可插拔的独立服务,专门用于管理地理空间数据。这些外部服务有自己的身份验证和授权机制,必须以某种方式与GeoNode同步。此外,在大多数情况下,除非特定配置没有禁用,否则这些外部服务维护替代安全访问,例如允许GeoNode在幕后修改地理空间目录,或者系统管理员具有对服务器的独立和特权访问。
在深入了解Geoserver/GeoNode A&A的工作方式以及如何对其进行配置以正确使用GeoNode之前,让我们快速澄清一下 Authentication
和 Authorization
概念。
身份验证¶
身份验证是通过使用某种凭证和握手协议来验证某人身份的过程。如果凭据有效,则开始授权过程。身份验证过程始终前进到授权过程(尽管它们通常看起来可能是组合在一起的)。这两个术语通常是同义词,但它们是两个不同的过程。
有关身份验证概念的更多详细信息和说明,请查看 here 。
授权¶
授权是通过对照某种安全规则、机制或协议检查受保护资源的角色和权限来允许经过身份验证的用户访问受保护资源的过程。换句话说,它允许通过向特定授权用户授予或拒绝特定权限来控制访问权限。
GeoNode安全后端¶
Django身份验证¶
Django身份验证系统同时处理身份验证和授权。
身份验证系统包括:
用户
权限:指定用户是否可以执行特定任务的二进制(是/否)标志。
组:将标签和权限应用于多个用户的通用方式。
一种可配置的口令散列系统
用于登录用户或限制内容的表单和视图工具
可插拔的后端系统
Django中的身份验证系统旨在非常通用,并且不提供Web身份验证系统中常见的一些功能。其中一些常见问题的解决方案已在第三方软件包中实施:
密码强度检查
限制登录尝试
针对第三方的身份验证(例如,OAuth)
注解
有关django认证系统安装和配置的更多详细信息,请参考官方指南https://docs.djangoproject.com/en/3.2/topics/auth/.
GeoNode通过幕后的基本身份验证与Geoserver通信,以便配置数据和Geoserver目录。
要执行此操作,您必须确保GeoNode知道 内部 Geoserver的管理员用户和密码。
警告
这必须是具有管理员权限的内部Geoserver用户,而不是GeoNode用户。
确保将凭据正确配置到文件中 settings.py
OGC_SERVER¶
确保 OGC_SERVER
设置配置正确。
请注意,这两个属性 LOGIN_ENDPOINT
和 LOGOUT_ENDPOINT
必须指定Geoserver OAuth2终结点(请参见下面的详细信息)。默认值 'j_spring_oauth2_geonode_login'
和 'j_spring_oauth2_geonode_logout'
在大多数情况下都可以使用,除非您需要一些与后一种情况不同的特定端点。在任何情况下,这些值 must 与Geoserver OAuth2插件配置一致。
如果有疑问,请使用下面的默认值。
默认值为:
...
# 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
}
}
...
GeoNode和Geoserver A&A交互¶
GeoNode使用的Geoserver实例有一个特殊的设置,允许两个框架正确交互并交换有关用户凭据和权限的信息。
特别是,Geoserver配置了 Filter Chain
对于使用以下两个协议的授权:
- 基本身份验证 ;这是默认的Geoserver身份验证机制。这利用了 rfc2617 - Basic and Digest Access Authentication 以便检查用户的凭据。
换句话说,Geoserver需要一个
username
和一个password
已编码 Base64 并将其与其内部数据库(默认情况下是Geoserver数据目录上的加密XML文件)进行比较。如果用户的凭据匹配,则Geoserver将通过其Role Services
(我们将在 Geoserver(安全后端) 部分)。注解
默认情况下,Geoserver附带
admin
和geoserver
作为默认管理员用户名和密码。在将Geoserver联机之前,必须至少更改管理员密码。OAuth2身份验证 ;此模块允许Geoserver根据 OAuth2 Protocol 。如果基本身份验证失败,Geoserver默认使用GeoNode作为OAuth2提供程序。
注解
更多详细信息可直接在地理服务器官方文档的“`Authentication Chain<http://docs.geoserver.org/latest/en/user/security/auth/chain.html#security-auth-chain>`_”“部分找到
从 GeoNode后端(服务器)端 ,服务器将利用 基本身份验证 使用管理员凭据配置Geoserver目录。当然,GeoNode必须可以访问Geoserver,并且GeoNode必须知道内部Geoserver管理员凭据。
从 GeoNode前端(浏览器和GUI)端 ,即 身份验证 目标是允许Geoserver将已经登录到GeoNode的用户识别为有效用户,从而提供一种 SSO 这两个应用程序之间的。
Geoserver必须知道并且必须能够通过HTTP/HTTPS访问GeoNode。换句话说,连接到GeoNode的外部用户必须使用相同的权限向Geoserver进行身份验证。这可以通过 OAuth2身份验证 协议。
GeoNode / GeoServer Authentication Mechanism
作为OAuth2提供程序的GeoNode(OP)
OpenID Connect是一个建立在OAuth 2.0协议之上的身份框架,它扩展了OAuth 2.0进程的授权以实现其认证机制。OpenID Connect添加了一个发现机制,允许用户使用外部可信机构作为身份提供者。从另一个角度看,这可以看作是单点登录(SSO)系统。
OAuth 2.0是一个授权框架,它能够为客户端提供代表资源所有者访问受限访问资源的方式。OpenID Connect允许客户端使用基于授权服务器的身份验证来验证用户。
作为一项操作,GeoNode将能够充当受信任的身份提供者,从而允许系统在隔离环境中工作和/或允许GeoNode对由本地Django身份验证子系统管理的私人用户进行身份验证。
作为OAuth2依赖方(RP)的Geoserver
多亏了 OAuth2身份验证 Geoserver能够直接从OAuth2提供程序(OP)检索最终用户的身份。
使用GeoNode作为OP,该机制将避免使用依赖于OAuth2安全协议的cookie。
OAuth2协议的工作原理:
依赖方将请求发送到OAuth2提供程序以对最终用户进行身份验证
OAuth2提供程序对用户进行身份验证
OAuth2提供程序将ID令牌和访问令牌发送给依赖方
依赖方使用从OAuth2提供程序接收的访问令牌向用户信息端点发送请求
用户信息端点返回声明。
GeoNode / GeoServer Authorization Mechanism
但是,允许Geoserver使用OAuth2来充当OAuth2RP并不足以将用户标识映射到其角色。
在Geoserver端,我们仍需要
RoleService
它将能够与GeoNode对话,并将令牌转换为要在Geoserver安全子系统自身内使用的用户主体。换句话说,身份验证成功后,Geoserver需要授权用户,以便了解他是否能够访问哪些资源。一个
REST based RoleService
在GeoNode端,允许Geoserver通过以下方式与GeoNode通信 REST 以获取当前用户及其角色列表。然而,仅知道与用户相关联的角色是不够的。完整的Geoserver授权需要捕获一组
Access Rules
与角色相关联,以便确定用户可以访问哪些资源和数据。Geoserver授权仅基于角色,因此对于每个经过身份验证的用户,我们还需要知道:
与有效用户会话关联的角色
与Geoserver资源关联的访问权限
上面的身份验证机制允许Geoserver获取有关用户及其角色的信息,这解决了第1点。
关于第2点,Geoserver利用 GeoFence Embedded Server 插件。GeoFence是一个Java Web应用程序,它使用中介绍的接口为Geoserver提供高级身份验证/授权引擎 here 。GeoFence拥有自己的规则数据库,用于管理授权规则,并通过实施复杂的资源访问管理器来覆盖标准的Geoserver安全管理系统。最不重要的是,GeoFence实现并公开了 REST API 允许远程授权客户端读/写/修改安全规则。
使用这种插件的好处是多方面的:
授权规则具有细粒度。GeoFence以类似于iptables的方式处理安全规则,甚至允许对子区域和层的属性定义安全约束。
GeoFence向其内部规则数据库公开了一个睡觉接口,允许外部管理员以编程方式更新安全约束
GeoFence实现了内部缓存机制,大大提高了负载下的性能。
GeoNode与GeoFence的交互
GeoNode本身能够通过GeoFence向Geoserver推送/管理授权规则 REST API ,充当Geoserver的管理员。GeoNode会在需要时正确配置GeoFence规则,即更新资源/层的权限。
Geoserver必须知道并且必须能够通过HTTP/HTTPS访问GeoNode。换句话说,连接到GeoNode的外部用户必须使用相同的权限向Geoserver进行身份验证。这可以通过 GeoNodeCoockieProcessingFiler 。
总而言之,我们将有不同的方式访问GeoNode图层:
通过地理节点通过Django身份验证和 GeoNodeCoockieProcessingFiler ;GeoNode中提供的用户基本上对Geoserver或任何其他后台都有效。
警告
如果GeoNode用户拥有“管理员”权限,他也可以管理Geoserver。
通过Geoserver安全子系统;除非明确禁用,否则始终可以使用其内部安全系统和用户访问Geoserver( 警告 这很危险,你必须知道你在做什么)。
现在让我们详细了解如何配置单个部分以及如何配置它们。
Django OAuth工具包设置和配置¶
如上所述,GeoNode使用OAuth2协议与Geoserver进行所有前端交互。GeoNode必须配置为OAuth2提供程序并提供 Client ID
和一个 Client Sercret
地球伺服器的钥匙。这可以通过启用和配置 Django OAuth Toolkit Plugin 。
警告
如果在第一次安装时不执行以下步骤,GeoNode和Geoserver将完全无法工作。
默认设置 settings.py
OAuth2的安全设置¶
仔细检查是否启用了OAuth2提供程序和安全插件,以及是否正确配置了以下设置。
AUTH_IP_WHITELIST¶
AUTH_IP_WHITELIST
property limits access to users/groups REST Role Service endpoints to the only whitelisted IP addresses. Empty list means 'allow all'.
If you need to limit 'api' REST calls to only some specific IPs fill the list like this: AUTH_IP_WHITELIST = ['192.168.1.158', '192.168.1.159']
默认值为:
...
AUTH_IP_WHITELIST = []
...
INSTALLED_APPS¶
为了允许GeoNode充当OAuth2提供程序,我们需要启用 oauth2_provider
Django应用程序由“Django OAuth工具包”提供。
默认值为:
...
INSTALLED_APPS = (
'modeltranslation',
...
'guardian',
'oauth2_provider',
...
) + GEONODE_APPS
...
MIDDLEWARE_CLASSES¶
安装 oauth2_provider `Django应用程序不足以启用全部功能。我们还需要GeoNode在其内部模型中包含其他实体。
默认值为:
...
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¶
为了允许GeoNode充当OAuth2提供程序,我们需要启用 oauth2_provider.backends.OAuth2Backend
Django后端由“Django OAuth工具包”提供。还要注意,我们需要指定OAuth2提供程序作用域,并声明 generator
为了创造而使用 OAuth2 Client IDs
。
默认值为:
...
# 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',
}
...
Django OAuth工具包管理安装程序¶
一旦 settings.py
和 local_settings.py
已为您的系统正确配置:
完成GeoNode设置步骤
准备模型
python manage.py makemigrations python manage.py migrate python manage.py syncdb
准备静电数据
python manage.py collectstatic
确保已使用初始默认数据填充数据库
警告
已弃用 此命令将在将来被迁移所取代,因此要小心。
python manage.py loaddata initial_data.json
确保您的环境存在超级用户
警告
已弃用 此命令将在将来被迁移所取代,因此要小心。
python manage.py createsuperuser
注解
阅读GeoNode Developer文档中的基本教程,了解有关特定命令以及如何使用它们的详细信息。
启动应用程序
根据设置的完成情况相应地启动GeoNode;通过运行调试模式
paver
或由诸如Apache2httpd、Nginx等HTTP服务器代理。完成OAuth2提供程序的设置
首先,您需要配置并创建一个名为的新OAuth2应用程序
GeoServer
通过GeoNode管理控制面板访问GeoNode管理控制面板
去
Django OAuth Toolkit
>Applications
更新或创建名为的应用程序
GeoServer
警告
应用程序名称 must BE
GeoServer
Client id
;代表OAuth2客户端ID的字母数字代码。Geoserver OAuth2插件 will 使用 this 价值。警告
在生产环境中,它是 高度 建议修改随GeoNode安装提供的默认值。
User
;搜索admin
用户。它的ID
将自动更新到表单中。Redirect uris
;可以在此指定多个URI。这些必须与Geoserver实例URI一致。Client type
; ChooseConfidential
Authorization grant type
; ChooseAuthorization code
Client secret
;代表OAuth2客户端密码的字母数字代码。Geoserver OAuth2插件 will 使用 this 价值。警告
在生产环境中,它是 高度 建议修改随GeoNode安装提供的默认值。
Name
; Must beGeoServer
Geoserver安全后端¶
Geoserver安全子系统¶
Geoserver有一个健壮的安全子系统,以Spring Security为模型。大多数安全功能都可以通过Web管理界面使用。
有关此功能的工作原理以及如何配置和修改的更多详细信息,请参阅Geoserver官方指南http://docs.geoserver.org/stable/en/user/security/webadmin/index.html
通过使用 GeoServer Data Dir
随GeoNode Build一起提供的以下配置已经可用。您只需根据您的环境相应地更新它们(如IP地址和主机名、OAuth2密钥等)。但是,建议仔细阅读以下所有段落,以便准确了解不同组件是如何配置的,并轻松识别部署过程中可能出现的任何问题。
本节的主要主题包括:
连接到GeoNode睡觉角色服务
地理服务器OAuth2认证过滤的设置
地球服务器过滤链的配置
GeoFence服务器和默认规则的设置和测试
连接到GeoNode睡觉角色服务¶
初步检查¶
Geoserver已启动并运行,并且您拥有管理员权限
Geoserver必须通过HTTP到达GeoNode实例
必须允许Geoserver主机IP地址访问GeoNode角色服务API(请参阅部分
AUTH_IP_WHITELIST
(上图)
地理节点睡觉角色服务的设置¶
以以下身份登录
admin
到Geoserver GUI警告
在生产系统中,请记住更改默认管理员凭据
admin
geoserver
访问
Security
>Users, Groups, Roles
部分如果尚未配置 这项服务
geonode REST role service
,请单击Role Services
>Add new
注解
这段话是 not 如果
geonode REST role service
已经创建好了。如果是,它将显示在角色服务列表中如果尚未配置 这项服务
geonode REST role service
,选择AuthKEY REST - Role service from REST endpoint
创建/更新
geonode REST role service
相应地,Name
; Must begeonode REST role service
Base Server URL
;必须指向GeoNode实例基URL(例如http://<geonode_host_url>
)Roles REST Endpoint
; Enter/api/roles
Admin Role REST Endpoint
; Enter/api/adminRole
Users REST Endpoint
; Enter/api/users
Roles JSON Path
; Enter$.groups
Admin Role JSON Path
; Enter$.adminRole
Users JSON Path
; Enter$.users[0].groups
一旦一切都设置好并且工作正常,请选择
Administrator role
和Group administrator role
作为ROLE_ADMIN
允许GeoFence使用以下内容验证规则 ROLES
¶
警告
以下说明因您当前使用的Geoserver版本而异。
Geoserver 2.9.x和2.10.x¶
访问
Security
>Settings
部分选择
geonode REST role service
作为Active role service
Geoserver2.12.x及更高版本¶
在GeoFence插件的最新更新中,后者不再识别默认设置中的角色服务,而是识别 geofence-server.properties
文件。
也就是说,重要的是 Security
> Settings
角色服务将设置为 默认设置 ,以允许Geoserver遵循标准授权链。
另一方面,您需要确保 geofence-server.properties
文件位于 $GEOSERVER_DATA_DIR/geofence
文件夹中包含以下两个附加属性:
gwc.context.suffix=gwc
org.geoserver.rest.DefaultUserGroupServiceName=geonode REST role service
地理服务器OAuth2认证过滤的设置¶
现在有必要检查Geoserver是否可以连接到OAuth2提供程序(特别是GeoNode OP),并能够通过它对用户进行身份验证。
初步检查¶
Geoserver已启动并运行,并且您拥有管理员权限
Geoserver必须通过HTTP到达GeoNode实例
OAuth2
Client ID
和Client Secret
已在GeoNode上生成并已知
GeoNodeOAuth2安全过滤的设置¶
访问
Security
>Authentication
部分如果尚未配置 认证过滤
geonode-oauth2 - Authentication using a GeoNode OAuth2
,请单击Authentication Filters
>Add new
注解
这段话是 not 如果
geonode-oauth2 - Authentication using a GeoNode OAuth2
已经创建好了。如果是,它将显示在身份验证筛选器列表中如果尚未配置 认证过滤
geonode-oauth2 - Authentication using a GeoNode OAuth2
,选择GeoNode OAuth2 - Authenticates by looking up for a valid GeoNode OAuth2 access_token key sent as URL parameter
创建/更新
geonode-oauth2 - Authentication using a GeoNode OAuth2
相应地,Name
; Must begeonode-oauth2
Enable Redirect Authentication EntryPoint
;建议将此放到False
,否则Geoserver将不允许您通过Form
但仅通过GeoNodeLogin Authentication EndPoint
; Unless you have specific needs, keep the default value/j_spring_oauth2_geonode_login
Logout Authentication EndPoint
; Unless you have specific needs, keep the default value/j_spring_oauth2_geonode_logout
Force Access Token URI HTTPS Secured Protocol
;这一定是False
除非您启用了Secured Connection
在GeoNode上。在这种情况下,您需要信任GeoNodeCertificate
在Geoserver JVM密钥库上。请查看下面的详细信息Access Token URI
; Set this tohttp://<geonode_host_base_url>/o/token/
Force User Authorization URI HTTPS Secured Protocol
;这一定是False
除非您启用了Secured Connection
在GeoNode上。在这种情况下,您需要信任GeoNodeCertificate
在Geoserver JVM密钥库上。请查看下面的详细信息User Authorization URI
; Set this tohttp://<geonode_host_base_url>/o/authorize/
Redirect URI
;将其设置为http://<geoserver_host>/geoserver
。这个地址 must 出席Redirect uris
地理节点的数量OAuth2
>Applications
>GeoServer
(请参阅上文)Check Token Endpoint URL
; Set this tohttp://<geonode_host_base_url>/api/o/v4/tokeninfo/
Logout URI
; Set this tohttp://<geonode_host_base_url>/account/logout/
Scopes
; Unless you have specific needs, keep the default valueread,write,groups
Client ID
;Client id
由GeoNode生成的字母数字密钥OAuth2
>Applications
>GeoServer
(请参阅上文)Client Secret
;Client secret
由GeoNode生成的字母数字密钥OAuth2
>Applications
>GeoServer
(请参阅上文)Role source
; In order to authorize the user against GeoNode, chooseRole service
>geonode REST role service
地球服务器过滤链的配置¶
以下步骤确保Geoserver可以采用更多的身份验证方法。如上所述,可以使用不同的协议向Geoserver进行身份验证。
Geoserver扫描与指定路径关联的身份验证筛选器链,并按顺序逐个尝试。第一个与协议匹配并能够授予用户访问权限的应用程序打破了这个循环,方法是创建 User Principal
把它注入地球服务器 SecurityContext
。然后,身份验证过程在这里结束,控制转到授权进程,它将尝试通过与授予访问权限的身份验证过滤相关联的可用地理服务器角色服务来检索经过身份验证的用户的角色。
初步检查¶
Geoserver已启动并运行,并且您拥有管理员权限
Geoserver必须通过HTTP到达GeoNode实例
这个
geonode-oauth2 - Authentication using a GeoNode OAuth2
认证过滤和geonode REST role service
已正确配置
地球服务器过滤连锁店的设置¶
访问
Security
>Authentication
部分标识该部分
Filter Chains
请确保
web
过滤链条配置如下所示警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。请确保
rest
过滤链条配置如下所示警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。请确保
gwc
过滤链条配置如下所示警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。请确保
default
过滤链条配置如下所示警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。添加
GeoNode Login Endpoints
添加到逗号分隔的webLogin
过滤连锁店警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。添加
GeoNode Logout Endpoints
添加到逗号分隔的webLogout
过滤连锁店警告
每次你修改过滤连锁店, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。添加
GeoNode Logout Endpoints
添加到逗号分隔的formLogoutChain
中的XML节点<GEOSERVER_DATA_DIR>/security/filter/formLogout/config.xml
您需要文本编辑器来修改该文件。
注解
如果
<formLogoutChain>
XML节点根本不存在,请创建一个 新的一个 如下所述<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>
警告
The value
j_spring_oauth2_geonode_logout
must be the same specified asLogout Authentication EndPoint
in thegeonode-oauth2 - Authentication using a GeoNode OAuth2
above.
GeoFence服务器和默认规则的设置和测试¶
为了正常工作,Geoserver需要 GeoFence Embedded Server 要在系统上安装和配置的插件。
为GeoNode提供的Geoserver配置已经使用默认配置安装了插件。在这种情况下,请按照下面的步骤仔细检查插件是否工作正常,以及是否设置了默认规则。
初步检查¶
Geoserver已启动并运行,并且您拥有管理员权限
这个 GeoFence Embedded Server 已在Geoserver上安装插件
地球服务器过滤连锁店的设置¶
访问
Security
>Authentication
部分标识该部分
Authentication Providers
并确保geofence
身份验证提供程序存在请确保
Provider Chain
配置如下所示警告
每次修改身份验证提供程序时, 别忘了存钱 这个
Authentication
设置。这 must 因……而完蛋了 each 变化。
GeoFence服务器和规则的设置¶
确保GeoFence服务器工作正常并且默认设置配置正确
访问
Security
>GeoFence
部分请确保
Options
配置如下,并且服务器在执行Test Connection
Allow remote and inline layers in SLD
; Set it toTrue
Allow SLD and SLD_BODY parameters in requests
; Set it toTrue
Authenticated users can write
; Set it toTrue
Use GeoServer roles to get authorizations
; Set it toFalse
检查GeoFence默认规则
访问
Security
>GeoFence Data Rules
部分请确保
DENY ALL
默认情况下存在规则,否则所有人都可以访问您的数据注解
这条规则是 始终 最后一个
警告
如果该规则不存在 在最底层 (这条规则是 始终 最后一个),手动添加。
访问
Security
>GeoFence Admin Rules
部分这里不需要任何规则
故障排除和高级功能¶
常见问题和修复¶
即使使用GeoNode,Geoserver/GeoNode OAuth2也不会以管理员身份进行身份验证
admin
用户Symptoms
当尝试使用
admin
使用OAuth2的用户,该过程正确地重定向到Geoserver页面,但我不是Geoserver管理员。Cause
这意味着Geoserver不知何故无法成功完成授权和身份验证过程。
问题的可能原因可能有以下几个:
地理服务器端的OAuth2身份验证失败
这通常是由于尝试完成身份验证过程时出现异常。
一个典型的原因是Geoserver尝试使用HTTPS连接,但GeoNode证书不可信;
在这种情况下,请参考下面的部分。另请查看日志(特别是Geoserver日志),如中所述 debug_geonode 。Geoserver日志应包含详细的异常,解释问题的原因。如果此处未列出任何异常(即使在将日志级别提高到 DEBUG ),请尝试检查GeoNode角色服务,如下所述。
另一个可能的问题是,不知何故,OAuth2握手无法成功完成;
通过Geoserver的Web登录表单以管理员身份登录到Geoserver。
仔细检查所有的
geonode-oauth2 - Authentication using a GeoNode OAuth2
参数正确。如果一切正常,请查看日志(特别是Geoserver日志),如中所述 debug_geonode 。Geoserver日志应包含详细的异常,解释问题的原因。如果此处未列出任何异常(即使在将日志级别提高到 DEBUG ),请尝试检查GeoNode角色服务,如下所述。
Geoserver无法从角色服务检索用户角色
始终仔细检查HTTP服务器和Geoserver日志,如第节所述 debug_geonode 。这可能会直接引导您找到问题的原因。
检查是否授予地理服务器主机访问中的地理节点角色服务睡觉API的权限
AUTH_IP_WHITELIST
的settings.py
检查是否
geonode REST role service
是默认角色服务,并且Geoserver OAuth2插件已配置为默认使用它检查GeoNode睡觉角色服务API是否正常运行并生成正确的json。
这可以通过使用简单的
cUrl
接到这样的电话curl 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"]}]}
如何设置 HTTPS
安全终端¶
在生产系统中,加密Geoserver和GeoNode之间的连接是一种很好的做法。这可以通过在GeoNode睡觉角色服务API和OAuth2端点上启用HTTPS协议来实现。
大多数情况下,您将使用生成的证书依赖自签名HTTPS连接。这就把我们之间的联系 不受信任 您需要告诉Geoserver Java虚拟机信任它。
这可以通过执行以下步骤来完成。
对于任何问题,请查看日志(特别是Geoserver日志),如中所述 debug_geonode 。Geoserver日志应包含详细的异常,解释问题的原因。
SSL受信任证书¶
在使用自定义 Keystore
或者尝试从非SSH连接访问不受信任或自签名的受SSL保护的OAuth2提供程序,您将需要将证书添加到JVM Keystore
。
要执行此操作,您可以执行以下步骤:
在此示例中,我们将执行以下操作
从GeoNode域检索SSL证书:
“访问令牌URI”=https://<geonode_host_base_url>/o/token/,因此我们需要信任
https://<geonode_host_base_url>
或 (<geonode_host_base_url>:443
)注解
您将需要从OAuth2终结点上使用的每个不同HTTPS URL获取并信任证书。
将SSL证书存储在本地硬盘上
将SSL证书添加到Java密钥库
使JVM能够检查来自密钥库的SSL证书
从GeoNode域检索SSL证书
使用
openssl
命令,以便转储证书为
https://<geonode_host_base_url>
openssl s_client -connect <geonode_host_base_url>:443
将SSL证书存储在本地硬盘上
复制并粘贴节
-BEGIN CERTIFICATE-
,-END CERTIFICATE-
并将其保存到.cert
文件注解
.cert
文件是纯文本文件,包含-BEGIN CERTIFICATE-
,-END CERTIFICATE-
各节geonode.cert
(或您想用的任何名称.cert
分机)将SSL证书添加到Java密钥库
您可以使用Java命令
keytool
就像这样geonode.cert
(或您想用的任何名称.cert
分机)keytool -import -noprompt -trustcacerts -alias geonode -file geonode.cert -keystore ${KEYSTOREFILE} -storepass ${KEYSTOREPASS}
或者,您也可以使用一些图形工具来帮助您管理SSL证书和密钥库,例如 Portecle
java -jar c:\apps\portecle-1.9\portecle.jar
使JVM能够检查来自密钥库的SSL证书
要做到这一点,您需要传递一个
JAVA_OPTION
发送到您的JVM:-Djavax.net.ssl.trustStore=F:\tmp\keystore.key
重新启动您的服务器
注解
下面您可以找到一个bash脚本,它简化了Keystore SSL证书的导入。方便的时候用吧。
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}
GeoFence高级功能¶
GeoFence规则管理和教程¶
This tutorial 显示如何安装和配置Geofence内部服务器插件。它展示了如何通过两种方式创建规则:使用图形用户界面和睡觉方法。
可以通过睡觉接口创建/更新/删除GeoFence规则,只有Geoserver管理员用户才能访问该接口。您可以找到有关GeoFence睡觉接口工作方式的更多详细信息 here 。
GeoFence规则存储配置¶
默认情况下,GeoFence配置为使用存储在Geoserver数据目录上的基于文件系统的数据库 <GEOSERVER_DATA_DIR/geofence
。
还可以配置GeoFence以使用外部PostgreSQL/PostGIS数据库。有关更多详细信息,请参阅GeoFence官方文档 here 。
添加
Java Libraries
至GeoServer
wget --no-check-certificate "https://www.dropbox.com/s/ilowu1vd27j2cs1/hibernate-spatial-postgis-1.1.3.2.jar?dl=1" -O hibernate-spatial-postgis-1.1.3.2.jar wget --no-check-certificate "https://www.dropbox.com/s/psolxleimaft0t7/postgis-jdbc-1.3.3.jar?dl=1" -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
在此处使用更新的模式创建数据库https://github.com/geoserver/geofence/blob/master/doc/setup/sql/002_create_schema_postgres.sql,或者通过配置文件启用hbm2ddl自动创建(请参见步骤
3
)注解
请注意,如果表不存在,“UPDATE”也会创建表。然而,在生产中,我建议将其更改为“验证”。
# 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;'
添加类似于的配置
geofence-datasource-ovr.properties
以下示例(如果加载为Geoserver Extension)<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.hibernatespatial.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 ################################################################################ ## 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