当前位置: 首页 > article >正文

Nginx 网关解决 Geoserver 图层访问控制

        Geoserver 是一个流行的 GIS 图层发布软件,它默认是对所有人开放访问所有的图层,这就造成了安全问题,比如 WFS 协议可以修改图层的要素信息。要对 Geoserver 进行图层访问控制,有很多种办法,最简单的是通过 Geoserver 本身提供的图层访问权限设置,比如RBAC 基于用户角色权限进行控制,基于Geoserver 的 Jetty 容器的 IP 过滤器设置黑名单,比较复杂的是基于Geoserver插件 AuthKey 的访问控制,基于 GeoNode 程序的访问控制,后面两个不好操作。

        因为 Nginx 可以代理转发 Geoserver 请求,而 Nginx 又可以充当网关,所以我们可以在 Nginx 里使用它的默认模块 ngx_http_auth_request_module 做权限控制,每当请求访问图层时,它的请求头都必须携带一个 token,然后 Nginx 先检查这个 token 是否有效,它是否有访问指定图层的权限,检测token 在一个独立的程序里进行。具体流程是用户登录时先获取一个token,这个token 关联了该用户可以访问的所有图层,然后把token 保存到 Redis 里,给它一个过期时间,当用户要访问图层时先获取到最新的token再去请求访问。 

http {
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';
    access_log /var/log/nginx/access.log main;

    upstream geoserver {
        server localhost:8092;
    }
    upstream authserver {
        server localhost:9999;
    }
    server {
        listen 8088;
        server_name example.com;

        location /geoserver {
            proxy_pass http://geoserver;
            
            # test 名称空间的所有图层 wms 访问时都需要认证 
            # 可以再加上 wfs,wmts 的链接
            location /geoserver/test/wms {
                auth_request /auth;
                proxy_pass http://geoserver;
            }
        }

        location =/auth {
            internal;
            proxy_pass_request_body off;
            proxy_set_header X-Original-Method GET;
            proxy_set_header X-Original-URI $request_uri;

            # $http_authorization的字段默认是 "Authorization"
            proxy_set_header Authorization $http_authorization;
            error_page 401 = @custom-401-page;

            # 认证程序的地址 
            proxy_pass http://authserver/auth;
        }
        location @custom-401-page {
            return 401 'Unauthorized access, invalid token';
        }

    }
}


http://www.kler.cn/a/374008.html

相关文章:

  • Open3D(C++) 基于法线微分的点云分割
  • PYNQ 框架 - VDMA驱动 - 帧缓存
  • Vant入门
  • [OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来
  • Spring Boot 全面指南
  • 练习LabVIEW第二十八题
  • idm扩展自动更新,导致不能正常使用处理方法
  • 企业应该采用和支持网络安全的几个实践
  • 高考相关 APP 案例分享
  • 【安全性分析】正式安全分析与非正式安全分析
  • 使用API有效率地管理Dynadot域名,将域名移动至某一文件夹中
  • 【瑞吉外卖】-day03
  • Qt 实战(10)模型视图 | 10.5、代理
  • 音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)
  • 组件封装思路
  • JDBC——获取DBMS连接、优化与工具类封装
  • 深入 Prometheus 监控生态 - 第六篇:与 Grafana 实现系统全面监控(健康状态和任务状态看板)
  • 邮件发送excel带预览excel功能
  • Rust线程构建安全并发应用
  • rocksDB手动安装
  • Vue 组件开发:深入理解与实践
  • Knowledge-refined Denoising Network for Robust Recommendation
  • BFS解决拓扑排序(3)_火星词典
  • 机器学习-期末考核-深度学习
  • 【jvm】如何设置新生代和老年代的比例
  • 【笔记】数据结构与算法