角色服务

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_ADMINROLE_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>

此配置包含两个名为 ADMINGROUP_ADMIN .角色 ADMIN 分配给 admin 用户。自从 ADMIN 角色映射到系统角色 ROLE_ADMINISTRATOR ,角色计算将两个角色分配给 admin 用户。

有关更多信息,请参阅 configuring a role serviceWeb管理界面 .

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 serviceWeb管理界面 .

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 serviceWeb管理界面 .

休息角色服务

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角色服务选项:

../../_images/restroleservice.png

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