我知道,例如通过进行查询来“破解”设置非常容易到GeoServer,只需简单地要求它列出所有可用的图层即可。
我有什么选择?我想在ubuntu服务器上设置apache可能会有帮助?有关此主题的任何教程吗?
#1 楼
首先,我认为您应该阅读有关安全性的Geoserver文档。 http://docs.geoserver.org/stable/zh-CN/user/security/index.html您会发现可以使不同的用户或角色可以访问/无法访问图层。另一种可能的解决方案这将是使外界无法访问geoserver(关闭服务器上用于IP的其他端口(而不是localhost)的8080端口),然后使用您选择的Web编程语言自行创建身份验证机制。
例如:您可以在php中设置某种登录/身份验证,以在身份验证后将请求转发到本地主机上的geoserver。
#2 楼
您可以看一下GeoPrisma我们需要开发一个对敏感的
数据集具有安全性的Web映射应用程序。这可以通过多个应用程序实现,并且可以通过对它们进行标准的登录+密码访问来实现,但是
项目太大,维护起来非常复杂。
添加一个例如,新的数据集将需要手动修改每个
应用程序,调整安全性等。
这就是为什么我们决定开发自己的包含访问控制的Web映射应用程序的原因使用可用的OpenSource Web映射对数据集进行分析。
http://geoprisma.org/dist/build/html/introduction/index.html
我需要扫描一下文档-如果您的系统上只有几个层/用户,将其添加到一个简单的项目中可能会过头了。
如果您拥有数百个对不同数据集具有编辑权限的用户/组,那么使用诸如GeoPrisma之类的现有项目可能很有意义。
否则,基于HTTP构建的标准Web服务器安全性可能就足够了。
评论
GeoPrisma可以与GeoServer一起使用吗?他们有可靠的往绩记录吗?
– Mimo
2011年11月17日下午13:19
它可以与包括GeoServer在内的任何WMS服务器一起使用。上面添加了评论。
– geoographika
2011年11月17日下午13:40
#3 楼
请调试此语句$ type = $ _ GET ['FORMAT'];
当您将FORMAT的值作为URL的参数传递时,是否会得到映射(图片)从服务器上获取,如果您正在获取,则您的代理应该可以正常工作。
#4 楼
一种方法是实现这样的代理,该代理可以验证用户使用会话变量登录的凭据,并且仅允许他们访问他们有权使用的资源,即:检查正在调用的层的url并拒绝访问用户无权查看它们。就他们可能看到的数据而言,如果它是较大数据集的子集,则稍微复杂一些,但我看到两种方法..
使用参数化SQL视图控制用户将看到哪些数据。您可以使用Proxy更改url,然后再使用该用户特定的参数将其传递给Geoserver。用户通过身份验证后,还可以通过Ajax调用将参数发送回Openlayers,并在OpenLayers中作为WMS getMAP调用的一部分提供参数。显示的实际数据可以通过SLD中的变量替换来过滤显示的数据,或者通过在WMS getMap调用中使用外部样式来更改用户用于显示给定图层的SLD。
在用户认证后使用Ajax调用指定地图范围仅允许用户在指定区域内移动。您还可以使用layerVisibility()来限制也可以显示哪些数据。
#5 楼
首先创建一个代理URL(使用您的编程语言)。
此代理URL将访问地理服务器。
在此代理URL中,您可以使用“用户和页面引用”进行身份验证。您可以检查是否从WebApp引用了URL。如果不是简单地发送未经授权的标头。
您将点击此代理URL而不是您的地理服务器URL。
没有人能够知道Geoserver的确切URL是什么,他不会能够破解它。
对于用户安全,只需在代理URL中添加对用户的检查即可。
从“开放层”中将wms-url传递为:http://domainname.com//proxyUrl。 php?user = userid
评论
另外:您可以拥有一个查找表,该表在您的应用程序的用户和GeoServer用户/角色/层之间具有关联,并在GeoServer上应用层级安全性。因此,当OpenLayer的代理请求一个图层时,它将查找相应的Geoserver凭据,对其进行身份验证,然后返回他有权访问的图层。这样,用户可以尝试请求他想要的任何其他层,但除非获得访问权,否则它将无法获得它。
– CaptDragon
2011-11-23 14:35