配置HTTP头代理身份验证

介绍

代理身份验证用于多层系统。用户/主体在代理服务器上进行身份验证,代理服务器向其他服务提供身份验证信息。

本教程演示如何配置geoserver以接受由HTTP头属性传递的身份验证信息。在这种情况下,geoserver本身不会进行实际的身份验证。

先决条件

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

备注

任何支持设置HTTP头属性的实用程序都可以用来代替curl。

配置HTTP头筛选器

  1. 启动geoserver并以 admin 用户。

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

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

    ../../../_images/digest22.jpg
  4. 单击 HTTP Header 链接。

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

    • 集合 Name “代理”

    • 集合 Request header attribute to 至“SDF09RT2s”

    • 集合 Role source 到“用户组服务”

    • 将用户组服务的名称设置为“默认”

以下是有关角色服务的其他信息 角色来源和角色计算

../../../_images/digest42.jpg

警告

本教程使用模糊的“sdf09rt2s”名称作为标题属性。为什么不使用“用户”或“用户名”?。在代理方案中,代理和地理服务器之间需要信任关系。攻击者可以很容易地发送一个具有HTTP头属性“user”和值“admin”的HTTP请求,并作为管理员进行操作。

一种可能是配置网络基础设施,防止来自除代理的IP以外的所有IP地址的此类请求。

本教程使用一个模糊的头属性名称,该名称应该是代理服务器和地理服务器之间的共享机密。此外,建议使用ssl,否则将以纯文本形式传输共享机密。

  1. 保存。

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

  3. 从中选择“默认” Request type 下拉。

  4. 取消选择 basic 筛选并选择 proxy 过滤。定位 proxy 过滤前 anonymous 过滤器。

    ../../../_images/digest52.jpg
  5. 保存。

安全OGC服务请求

为了测试上一节中配置的身份验证设置,必须首先保护服务或资源。这个 Default 过滤链是应用于所有OGC服务请求的链,因此必须配置服务安全规则。

  1. 从GeoServer主页单击 Services 链接位于 Security 导航边栏的部分。

    ../../../_images/digest61.jpg
  2. 在“服务安全”页上,单击 Add new rule 链接并添加一个catch all规则,用于保护所有需要 ADMIN 角色。

    ../../../_images/digest71.jpg
  3. 保存。

测试代理登录

  1. 执行以下curl命令:

    curl -v  -G "http://localhost:8080/geoserver/wfs?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. 执行相同的命令,但指定 --header 选项.::

    curl -v --header "sdf09rt2s: admin" -G "http://localhost:8080/geoserver/wfs?request=getcapabilities"
    

    结果应该是成功的身份验证,并包含正常的WFS功能响应。