配置Apache HTTPD会话集成

介绍

当使用apache httpd作为geoserver的代理前端时,可以使用两者的适当配置共享身份验证。

这需要为apache httpd中的geoserver位置启用会话,并添加带有会话内容的自定义请求头,以便geoserver安全系统可以接收用户凭据,并使用它们通过其内部筛选器对用户进行身份验证。

要正确分析收到的凭据,我们需要使用 Credentials From Request Headers 身份验证筛选器。

请注意,包含密码的头不会来回发送到用户浏览器,而是只从Apache httpd发送到geoserver,因此密码不会通过公共网络清晰地发送。

本教程演示如何配置geoserver从ApacheHTTPD会话中读取用户凭据,并将其用于身份验证。

先决条件

本教程使用 curl 实用程序发出测试身份验证的HTTP请求。继续之前安装curl。

从请求头筛选器配置凭据

  1. 启动geoserver并以 admin 用户。

  2. 单击 Authentication 链接位于 Security 导航边栏的部分。

    ../../../_images/digest1.jpg
  3. 向下滚动到 Authentication Filters 面板并单击 Add new 链接。

    ../../../_images/digest2.jpg
  4. 单击 Credentials From Headers 链接。

    ../../../_images/digest3.jpg
  5. 按如下方式填写设置表单的字段:

    • 集合 Name “阿帕切塞森”

    • 集合 Username Header 到“X凭证”

    • 集合 Regular Expression for Username 致“私人用户”=( [^&] *)他说:“这是一个很好的选择。”

    • 集合 Password Header 到“X凭证”

    • 集合 Regular Expression for Password 至“私人密码”=( [^&] *)他说:“这是一个很好的选择。”

    ../../../_images/digest4.jpg
  6. 保存。

  7. 返回“身份验证”页,向下滚动到 Filter Chains 面板。

  8. 单击链网格中的“默认”。

  9. 向下滚动并从 Selected 列出并添加 apachessesion 过滤器。

    ../../../_images/digest5.jpg
  10. 关闭。

  11. 保存。

测试登录

  1. 执行以下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>
    ...
    
  2. 执行相同的命令,但指定正确的密码。::

    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中对用户进行身份验证。