密钥验证模块¶
这个 authkey
GeoServer模块允许为OGC客户端设计一个非常简单的身份验证协议,它不能处理任何类型的安全协议,甚至不能处理HTTP基本身份验证。
对于这些客户机,模块通过在用作唯一身份验证令牌的URL中附加唯一密钥来允许最小形式的身份验证。显然,这种方法对安全令牌嗅探是开放的,必须始终与使用HTTPS连接相关联。
经过身份验证的请求示例如下:
http://localhost:8080/geoserver/topp/wms?service=WMS&version=1.3.0&request=GetCapabilities&authkey=ef18d7e7-963b-470f-9230-c7f9de166888
哪里 authkey=ef18d7e7-963b-470f-9230-c7f9de166888
与特定用户相关联(稍后将详细介绍)。Capability文档包含到服务器本身的反向链接,链接到可用于执行GetMap、GetFeatureInfo等的URL。当 authkey
参数,则反向链接也将包含身份验证密钥,从而允许任何兼容的WMS客户端访问受保护的资源。
局限性¶
这个 authkey
模块用于OGC服务。它在管理GUI和RESTConfig上都不能正常工作。
这个 authkey
模块替换了默认的基本身份验证提供程序,因此在编辑用户时,启用复选框不会影响 authkey
提供程序,您不能以这种方式禁用用户。
关键提供者¶
密钥提供商负责将身份验证密钥映射到用户。认证密钥本身是UUID(通用唯一标识符(UUID))。密钥提供者需要用户/组服务,它负责将身份验证密钥与该服务中包含的用户同步。
使用用户属性的密钥提供程序¶
此密钥提供程序使用用户属性 UUID
将身份验证密钥映射到用户。用户属性存储在用户/组服务中。同步很简单,因为逻辑必须搜索没有属性的用户 UUID
再加上它。属性值是生成的UUID。
UUID=B52D2068-0A9B-45D7-AACC-144D16322018
如果用户/组服务是只读的,则必须从外部添加属性,不可能进行同步。
使用属性文件的密钥提供程序¶
此密钥提供程序使用名为 authkeys.properties
. 默认的用户/组服务名为 default
. 这个 authkeys.properties
因为这项服务将位于
$GEOSERVER_DATA_DIR/security/usergroup/default/authkeys.propeties
示例文件如下所示:
# Format is authkey=username
b52d2068-0a9b-45d7-aacc-144d16322018=admin
1825efd3-20e1-4c18-9648-62c97d3ee5cb=sf
ef18d7e7-963b-470f-9230-c7f9de166888=topp
此密钥提供程序也适用于只读用户/组服务。同步将添加在此文件中没有条目的新用户,并删除在用户/组服务中删除的用户条目。
使用外部Web服务的密钥提供程序¶
此密钥提供程序调用外部URL以将身份验证密钥映射到用户。这允许geoserver集成到现有的安全基础结构中,在该基础结构中,会话令牌在应用程序之间共享,并通过专用Web服务进行管理。
可以指定web服务URL和其他一些参数来详细配置映射器:
Option |
Description |
|
密钥映射Web服务的完整URL,带有一个特殊的占位符(密钥),将由当前身份验证密钥替换。 |
|
用于从webservice响应中提取用户名的正则表达式;正则表达式中的第一个匹配组(括号中包含的部分)将用作用户名;默认值(^\s (. )\s*$)获取所有响应文本,并在两端修剪空格 |
|
连接到WebService的超时 |
|
从WebService读取数据超时 |
映射器将使用HTTP GET请求调用WebService(尚不支持需要发布的WebService),将配置的URL中的键占位符替换为实际的身份验证键。
如果收到响应,则使用配置的正则表达式对其进行解析,以从中提取用户名。将自动从响应中删除新行。可以使用的正则表达式的一些示例如下:
正则表达式 |
Usage |
|
两端的所有文本剪裁空间 |
|
json响应,其中用户名包含在名为 user |
|
用户名包含在名为的标记中的XML响应 用户名 |
此映射器不支持将用户与用户/组服务同步。
Authkey WebService正文响应用户组服务¶
使用外部Web服务获取身份验证详细信息时,可以定义自定义 GeoServer UserGroup Service
能够从HTTP主体响应获取权限(也称为用户角色)。
基本原理是一样的;那种 GeoServer UserGroup Service
将应用 rolesRegex
-角色正则表达式-对主体的响应-可以是XML、JSON或纯文本/HTML-以便获取可用权限列表。
为此,可以配置 AuthKEY WebService主体响应 用户组服务。
首先要做的是:
以身份登录
Administrator
移动到
Security
>Users, Groups, Roles
并选择Add new
从User Group Services
点击
AuthKEY WebService Body Response
提供一个
Name
从中选择任何你想要的Passwords
-这些服务不会使用,但对于GeoServer它们仍然是必需的-提供合适的
Roles Regex
应用于Web服务响应备注
这是唯一需要提供的实际强制值。其他选项是可选的,允许您自定义用户组服务行为(见下文)
一旦新的 GeoServer UserGroup Service
已配置,它可以轻松链接到 Key Provider Web Service Mapper
.
从
Authentication
>Authentication Filters
,选择-或添加新-AuthKEY
使用Web Service
作为关键映射程序选择新定义的
UserGroup Service
并保存
其他选项
Optional static comma-separated list of available Groups from the Web Service response
值得注意的是
UserGroup Service
将 总是 转换表单中获取的角色ROLE_<ROLENAME>
作为一个例子,如果
Roles Regular Expression
将匹配如下内容:my_user_role1, another_custom_user_role, role_External_Role_X
这将转换为 3 不同的
GeoServer User Roles
命名为:ROLE_MY_USER_ROLE1 ROLE_ANOTHER_CUSTOM_USER_ROLE ROLE_EXTERNAL_ROLE_X
当然,角色名只在运行时才知道;但是 静态的 指定关联的
GeoServer User Groups
稍后映射到其他内部GeoServer User Roles
.这是什么意思?一个
GeoServer User Group
可以在GeoServer目录上定义,也可以由活动的Role Services
一个或多个特定的GeoServer User Roles
.这主要取决于
GeoServer Role Service
你用的。默认情况下,内部GeoServer Role Service
可以通过存储在GeoServer Data Dir上的静态配置映射角色和组。这可以通过编辑GeoServer User Group
详细信息来自Users, Groups, and Roles
面板现在,这个习俗
UserGroup Service
动态映射GeoServer User Role
到GeoServer User Group
如下:ROLE_MY_USER_ROLE1 <> GROUP_MY_USER_ROLE1 ROLE_ANOTHER_CUSTOM_USER_ROLE <> GROUP_ANOTHER_CUSTOM_USER_ROLE ROLE_EXTERNAL_ROLE_X <> GROUP_EXTERNAL_ROLE_X
为了能够分配任何
GeoServer User Group
至其他内部GeoServer User Roles
,因为这些只在运行时才知道UserGroup Service
允许我们 静态的 指定GeoServer User Groups
Web服务可以使用;这可以通过设置Optional static comma-separated list of available Groups from the Web Service response
选项:一旦正确配置,就可以编辑和分配
GeoServer User Roles
以标准的方式要使用的角色服务
默认情况下,如果没有
Role Service
指定的UserGroup Service
将使用GeoServer Active Role Service
解决GeoServer User Roles
从GeoServer User Groups
-如上所述-可以定义
Custom Role Service
取而代之GeoServer User Roles
;只需选择Role Service
使用Role Service to use
选项
配置¶
可以使用管理员GUI进行配置。有一种名为 身份验证密钥 提供以下选项。
URL参数名称。这是客户端HTTP请求中使用的URL参数的名称。默认为
authkey
.密钥提供程序。GeoServer提供了上述的提供者。
要使用的用户/组服务。
某些密钥提供程序可能需要其他配置参数。当选择其中一个时,这些将出现在密钥提供程序组合框下。
配置过滤器之后,需要将此过滤器放到身份验证过滤器链上。
备注
此筛选器的管理员GUI具有按钮 使同步 . 单击此按钮可保存当前配置并触发同步。如果从备用用户/组服务添加/删除用户,则应触发同步逻辑。
提供程序可插入性¶
通过一些Java编程,可以以编程方式创建和注册一个新的密钥,该名称映射器在不同的逻辑下工作。例如,您可以拥有每日令牌、令牌生成器等。
为了提供自定义映射器,必须实现 org.geoserver.security.AuthenticationKeyMapper
接口,然后在Spring应用程序上下文中注册所述bean。或者可以从 org.geoserver.security.AbstractAuthenticationKeyMapper
.映射器(密钥提供程序)必须实现
/**
*
* Maps a unique authentication key to a username. Since usernames are
* unique within a {@link GeoServerUserGroupService} an individual mapper
* is needed for each service offering this feature.
*
* @author Andrea Aime - GeoSolution
*/
public interface AuthenticationKeyMapper extends BeanNameAware {
/**
* Maps the key provided in the request to the {@link GeoServerUser} object
* of the corresponding user, or returns null
* if no corresponding user is found
*
* Returns <code>null</code> if the user is disabled
*
* @param key
* @return
*/
GeoServerUser getUser(String key) throws IOException;
/**
* Assures that each user in the corresponding {@link GeoServerUserGroupService} has
* an authentication key.
*
* returns the number of added authentication keys
*
* @throws IOException
*/
int synchronize() throws IOException;
/**
* Returns <code>true</code> it the mapper can deal with read only u
* user/group services
*
* @return
*/
boolean supportsReadOnlyUserGroupService();
String getBeanName();
void setUserGroupServiceName(String serviceName);
String getUserGroupServiceName();
public GeoServerSecurityManager getSecurityManager();
public void setSecurityManager(GeoServerSecurityManager securityManager);
}
映射器必须在Spring应用程序上下文中的 applicationContext.xml
文件在jar的根目录中。名为 com.mycompany.security.SuperpowersMapper
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="superpowersMapper" class="com.mycompany.security.SuperpowersMapper"/>
</beans>
现在你可以放下 authkey
jar和自定义映射器jar一起使用,并在身份验证密钥过滤器的管理员GUI中使用它。