角色服务¶
A 角色服务 为角色提供以下信息:
角色列表
计算给定用户的角色分配
将角色映射到系统角色
ROLE_ADMINISTRATOR
将角色映射到系统角色
ROLE_GROUP_ADMIN
当用户/组服务加载有关用户或组的信息时,它将委托角色服务来确定应该将哪些角色分配给用户或组。不像 用户/组服务 ,则在任何给定时间只有一个角色服务处于活动状态。默认角色服务设置在 设置 佩奇。
默认情况下,geoserver支持两种类型的角色服务:
XML- (默认) 角色服务保留为XML
JDBC角色服务通过JDBC保存在数据库中
将角色映射到系统角色¶
分配系统角色 ROLE_ADMINISTRATOR
对于用户或组,必须创建一个具有不同名称的新角色,并将其映射到 ROLE_ADMINISTRATOR
角色。系统角色也是如此 ROLE_GROUP_ADMIN
.映射存储在服务的 config.xml
文件。
<roleService>
<id>471ed59f:13915c479bc:-7ffc</id>
<name>default</name>
<className>org.geoserver.security.xml.XMLRoleService</className>
<fileName>roles.xml</fileName>
<checkInterval>10000</checkInterval>
<validating>true</validating>
<adminRoleName>ADMIN</adminRoleName>
<groupAdminRoleName>GROUP_ADMIN</groupAdminRoleName>
</roleService>
在本例中,分配给角色的用户或组 ADMIN
也分配给系统角色 ROLE_ADMINISTRATOR
.同样的道理也适用于 GROUP_ADMIN
和 ROLE_GROUP_ADMIN
.
XML角色服务¶
XML角色服务将角色数据库保存在XML文件中。这是geoserver的默认角色服务。此服务将用户数据库表示为XML,并与此对应 XML schema
.
备注
XML角色文件, roles.xml
,位于geoserver数据目录中, security/role/<name>/roles.xml
在哪里 <name>
是角色服务的名称。
服务配置为映射本地角色 ADMIN
到系统角色 ROLE_ADMINISTRATOR
. 此外, GROUP_ADMIN
映射到 ROLE_GROUP_ADMIN
.映射存储在 config.xml
每个角色服务的文件。
下面提供了 roles.xml
它附带了默认的geoserver配置:
<roleRegistry version="1.0" xmlns="http://www.geoserver.org/security/roles">
<roleList>
<role id="ADMIN"/>
<role id="GROUP_ADMIN"/>
</roleList>
<userList>
<userRoles username="admin">
<roleRef roleID="ADMIN"/>
</userRoles>
</userList>
<groupList/>
</roleRegistry>
此配置包含两个名为 ADMIN
和 GROUP_ADMIN
.角色 ADMIN
分配给 admin
用户。自从 ADMIN
角色映射到系统角色 ROLE_ADMINISTRATOR
,角色计算将两个角色分配给 admin
用户。
有关更多信息,请参阅 configuring a role service 在 Web管理界面 .
J2EE角色服务¶
J2EE角色服务从 WEB-INF/web.xml
文件。因此,此服务是只读角色服务。角色从以下XML元素中提取:
<security-role>
¶
<security-role> <role-name>role1</role-name> </security-role> <security-role> <role-name>role2</role-name> </security-role> <security-role> <role-name>employee</role-name> </security-role>检索到的角色:
role1
role2
employee
<security-constraint>
¶
<security-constraint> <web-resource-collection> <web-resource-name>Protected Area</web-resource-name> <url-pattern>/jsp/security/protected/*</url-pattern> <http-method>PUT</http-method> <http-method>DELETE</http-method> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>role1</role-name> <role-name>employee</role-name> </auth-constraint> </security-constraint>检索到的角色:
role1
employee
<security-role-ref>
¶
<security-role-ref> <role-name>MGR</role-name> <!-- role name used in code --> <role-link>employee</role-link> </security-role-ref>检索到的角色:
MGR
JDBC角色服务¶
JDBC角色服务通过JDBC保存角色数据库,在多个表中管理角色信息。角色数据库架构如下:
场 |
类型 |
无效的 |
键 |
---|---|---|---|
名称 |
varchar(64个) |
NO |
PRI |
起源 |
varchar(64个) |
YES |
场 |
类型 |
无效的 |
键 |
---|---|---|---|
罗列名 |
varchar(64个) |
NO |
PRI |
道具名 |
varchar(64个) |
NO |
PRI |
比例值 |
瓦查尔(2048) |
YES |
场 |
类型 |
无效的 |
键 |
---|---|---|---|
用户名 |
varchar(128个) |
NO |
PRI |
罗列名 |
varchar(64个) |
NO |
PRI |
场 |
类型 |
无效的 |
键 |
---|---|---|---|
组名字 |
varchar(128个) |
NO |
PRI |
罗列名 |
varchar(64个) |
NO |
PRI |
这个 roles
TABLE是主表,包含角色列表。Geoserver中的角色支持继承,因此角色可以有选择地具有指向父角色的链接。这个 role_props
表将其他属性映射到角色。(请参阅 角色 了解更多详细信息。)这个 user_roles
表将用户映射到分配给他们的角色。类似地, group_roles
该表映射了已将哪些组分配给哪些角色。
默认的geoserver安全配置为:
名称 |
起源 |
---|---|
空的 |
空的 |
罗列名 |
道具名 |
比例值 |
---|---|---|
空的 |
空的 |
空的 |
用户名 |
罗列名 |
---|---|
空的 |
空的 |
组名字 |
罗列名 |
---|---|
空的 |
空的 |
有关更多信息,请参阅 configuring a role service 在 Web管理界面 .
LDAP角色服务¶
LDAP角色服务是一个只读角色服务,它将组从LDAP存储库映射到地理服务器角色。
从特定的LDAP节点提取组,配置为 Groups search base
.为每个匹配组映射一个角色。角色将具有一个以组公用名(cn属性)构建的名称,该名称将转换为大写,并具有 ROLE_
应用前缀。
可以使用 All groups filter
(默认为 cn=*
它基本上从配置的基础中提取所有节点)。也可以为配置筛选器 users to roles membership
(默认为成员=0)。
可以将特定组分配给 ROLE_ADMINISTRATOR
和/或 ROLE_GROUP_ADMIN
管理角色。
组提取可以匿名进行,或者在LDAP存储库需要时使用给定的用户名/密码。
此类型角色服务的配置文件(config.xml)示例如下:
<org.geoserver.security.ldap.LDAPRoleServiceConfig> <id>-36dfbd50:1424687f3e0:-8000</id> <name>ldapacme</name> <className>org.geoserver.security.ldap.LDAPRoleService</className> <serverURL>ldap://127.0.0.1:10389/dc=acme,dc=org</serverURL> <groupSearchBase>ou=groups</groupSearchBase> <groupSearchFilter>member=uid={0},ou=people,dc=acme,dc=org</groupSearchFilter> <useTLS>false</useTLS> <bindBeforeGroupSearch>true</bindBeforeGroupSearch> <adminGroup>ROLE_ADMIN</adminGroup> <groupAdminGroup>ROLE_ADMIN</groupAdminGroup> <user>uid=bill,ou=people,dc=acme,dc=org</user> <password>hello</password> <allGroupsSearchFilter>cn=*</allGroupsSearchFilter> </org.geoserver.security.ldap.LDAPRoleServiceConfig>
有关更多信息,请参阅 configuring a role service 在 Web管理界面 .
休息角色服务¶
REST角色服务是一个只读角色服务,它将组和关联用户从远程REST Web服务映射到角色。
剩下的服务 must 支持JSON编码。
以下是REST角色服务提供的重要方法列表(基于LDAP角色服务,同样必须进行网络调用才能工作):
方法 |
强制性的 |
---|---|
获取用户名错误(rolename) |
n(在LDAP中实现,但除了没有人使用的实用方法外,我看不到该方法的实际用户) |
GetRolesForUser(用户) |
Y |
获取组(组)的角色 |
N |
获取角色() |
Y(用户界面使用) |
GetParentRole(角色) |
N |
获取管理员角色() |
Y |
GetGroupAdminRole()。 |
Y |
GetRoleCount()。 |
y(似乎使用不多,我们可以从getroles()中轻松实现它) |
其他API¶
以下是角色服务可能处理的rest API的示例。JSON和远程端点可能不同;这可以通过UI进行配置,从而允许REST角色服务连接到通用REST服务
从上面我们可以看到下面的RESTAPI
../api/roles
返回角色的完整列表(不需要分页,我们假定它很小)。回答示例:
{"groups":["r1","r2","r3"]}
../api/adminrole
返回管理员的角色(是的,只有一个,这很奇怪…):
{"adminRole":["root"]}
../api/users/<user>
返回特定用户的角色列表。回答示例:
{"users": [{"user":"u1", "groups":["r1","r2"]}]}
可配置API¶
与远程服务对话的GeoServerRoleService提供以下配置参数:
远程服务的基本URL
各种调用的可配置URL
包含角色列表和一个管理员角色的属性的JSON路径
以上内容可以通过 Web管理界面 。下图显示了配置为与上述示例API兼容的REST角色服务选项:

基于REST的角色服务配置面板¶