geoserver 安全配置
角色体系
user group 与role
user指某一个用户,登录时使用的admin就是一个用户; group是user的集合,与user的关系是一对多的关系。role指角色,用于权限配置。user或是group是否具有某个权限取决于其是否具有某个role信息,role是起决定作用的。
如果用户属于某组织,那么该用户具有该组织所有的角色信息。
OWS服务权限配置
ows地图服务可以限制角色访问,没有权限的访问会显示401未认证错误。限制的方式有两种,一种是直接配置ows服务的角色访问,另一种是配置图层的角色访问。
ows服务的角色配置
// 修改geoserver目录, $geoserver_home/data_dir/security/services.properties
// 格式: <service>.<operation|*>=<role>[,<role2>,...]
/** 例子*/
wms.GetMap=role1 // wms服务的GetMap请求仅role1角色可用
wms.GetFeatureInfo=role2,role3 // wms服务的GetFeatureInfo请求role2角色和role3角色可用
wms.*=role4 // wms服务的所有请求role4角色都可用
ows图层的角色配置
// 修改geoserver目录,$geoserver_home/data_dir/security/layers.properties
// 格式 workerspace.layer.operation=<role>[,<role2>,...]
/** 例子*/
workspace1.layer1.r=role1 // workspace1工作空间内的layer1图层仅角色role1可读
workspace2.layer2.w=role2,role22 // workspace2工作空间内的layer2图层角色role2和角色role22可写
workspace3.layer3.a=* // workspace3工作空间内的layer3图层所有角色可读可写
ows服务请求添加请求头
假如某一wms服务的GetMap请求仅role1角色可用,用户user1(密码为123456)是role1角色,那么可在请求头中添加如下内容
{ Authorization: "Basic dXNlcjE6MTIzNDU2" }
Basic是不变的字符串,dXNlcjE6MTIzNDU2是字符串user1:123456的base64编码(在线base64编/解码),注意二者中间有个空格
注意:在请求头添加上面的认证信息有一定风险,因为base64是可以解码的,更严重的是解码后得到的结果是用户名和密码。所以不能使用管理员的账户来做验证,可以使用具有限制权限的用户。
使用Key Authentication扩展
安装扩展
不同版本的安装包不同,这里可以下载对应的扩展包。包里面的内容应该是jar
后缀的文件,将所有jar
文件拷贝到GeoServer_Home\webapps\geoserver\WEB-INF\lib
, 如果文件存在则覆盖。
不要忘了重启geoserver服务
配置扩展
首先需要新增Authentication Filters
, 如图所示
新增Authentication Filters
,选择AuthKey的方式
Authentication key to user mapper
有三种方式:
-
Property file: 使用属性文件来认证,属性文件保存在
$geoserver_home\data_dir\security\usergroup\default\authkeys.properties
, 这个文件是需要在页面上点击Synchronize user/group service
来生成的,本来是没有的这里的uuid是最终在ows请求中使用的
-
User Property:使用用户的UUID来认证,同样需要点击
Synchronize user/group service
来生成,生成后可以在对应的页面查看,如图同样,这里的uuid也是在ows会使用到的
-
Web Service:使用外部web服务认证,没有过多研究,这里不做解释
接下来需要新增Filter Chain
, 这里的设置是真正限制ows访问的
设置完成后访问ows服务需要通过authkey的方式
参考链接