角色體系
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的方式
參考鏈接