配置Apache HTTPD会话集成¶
介绍¶
当使用apache httpd作为geoserver的代理前端时,可以使用两者的适当配置共享身份验证。
这需要为apache httpd中的geoserver位置启用会话,并添加带有会话内容的自定义请求头,以便geoserver安全系统可以接收用户凭据,并使用它们通过其内部筛选器对用户进行身份验证。
要正确分析收到的凭据,我们需要使用 Credentials From Request Headers 身份验证筛选器。
请注意,包含密码的头不会来回发送到用户浏览器,而是只从Apache httpd发送到geoserver,因此密码不会通过公共网络清晰地发送。
本教程演示如何配置geoserver从ApacheHTTPD会话中读取用户凭据,并将其用于身份验证。
先决条件¶
本教程使用 curl 实用程序发出测试身份验证的HTTP请求。继续之前安装curl。
从请求头筛选器配置凭据¶
启动geoserver并以
admin
用户。单击
Authentication
链接位于Security
导航边栏的部分。向下滚动到
Authentication Filters
面板并单击Add new
链接。单击
Credentials From Headers
链接。按如下方式填写设置表单的字段:
集合
Name
“阿帕切塞森”集合
Username Header
到“X凭证”集合
Regular Expression for Username
致“私人用户”=( [^&] *)他说:“这是一个很好的选择。”集合
Password Header
到“X凭证”集合
Regular Expression for Password
至“私人密码”=( [^&] *)他说:“这是一个很好的选择。”
保存。
返回“身份验证”页,向下滚动到
Filter Chains
面板。单击链网格中的“默认”。
向下滚动并从
Selected
列出并添加apachessesion
过滤器。关闭。
保存。
测试登录¶
执行以下curl命令(密码错误)::
curl -v -H "X-Credentials: private-user=admin&private-pw=wrong" "http://localhost:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities"
结果应该是403响应,表明访问被拒绝。输出应该如下所示:
* About to connect() to localhost port 8080 (#0) * Trying ::1... connected > GET /geoserver/wfs?request=getcapabilities HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: localhost:8080 > Accept: */* > < HTTP/1.1 403 Access Denied < Content-Type: text/html; charset=iso-8859-1 < Content-Length: 1407 < Server: Jetty(6.1.8) < <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> <title>Error 403 Access Denied</title> </head> ...
执行相同的命令,但指定正确的密码。::
curl -v -H "X-Credentials: private-user=admin&private-pw=geoserver" "http://localhost:8080/geoserver/wms?service=WMS&version=1.1.1&request=GetCapabilities"
结果应该是成功的身份验证,并包含正常的WMS功能响应。
配置apache httpd以转发带有身份验证凭据的头¶
这可以通过如下所示的httpd配置完成:
<Location /geoserver> Session On SessionEnv On SessionHeader X-Replace-Session SessionCookieName session path=/ SessionCryptoPassphrase secret RequestHeader set X-Credentials "%{HTTP_SESSION}e" </Location>
此配置添加新的 X-Credentials 每个geoserver请求的请求头。请求头将包含特殊格式的httpd会话信息。
会话内容的示例如下:
x-credentials:private user=admin&private pw=geoserver
如您所见,它同时包含用户的用户名和密码,因此数据可用于在geoserver中对用户进行身份验证。