GeoServer 2.3.0'da özel Kimlik Doğrulama filtresi oluşturma


10

bağlam

Mevcut projemde, GeoServer'a (2.3.0) gelen isteklere izin verildiğini doğrulama zorunluluğum var.

Proje şu gerçeklere sahiptir:

  • GS istemcisi ana bilgileri (örneğin şifre) sağlayamaz, GS'nin kendisinin bir kullanıcı / rol deposuyla bağlantısı yoktur

Bu nedenle, aşağıdakileri kontrol etmek için auth filtre mekanizmasını kullanma fırsatını yakaladık:

  • geçerli bir istek (belirli bir WFS katmanına) özel bir HTTP Üstbilgisi içeriyor (diyelim X-CUSTOM-VALID)
  • Bu başlık, isteğin geçerli bir üçüncü sisteme (bir kullanıcı adı, bir sır, bunun gibi şeyler) bağlı bir istemci tarafından başlatıldığını doğrulamak için yeterli bilgiyi tutan JSON kodlu bir iletidir.

durum

Dokümantasyon bunu yapmaya muktedir gerektiğini bize anlatıyor ...

Bununla birlikte, belgeler bu tür bileşenlerin nasıl oluşturulacağı ve nasıl yapılandırılması gerektiği konusunda net değildir.

GeoServer Hata Ayıklama Böyle bir filtreyi yapılandırmak için özel bir Kimlik Doğrulama Sağlayıcısı gerektirir. Bu, web yöneticisi arayüzünde bir panel olması için (kimlik doğrulama altında, Kimlik Doğrulama Filtreleri listesinde)

Panel

Böylece benim kod bu dosyalardan oluşur:

  • ProducteurAuthFilterPanel.java
  • ProducteurAuthFilterPanelInfo.java
  • ProducteurAuthenticationFilterConfig.java
  • ProducteurAuthenticationFilterPanel.html

Bunların Web Yönetici Arayüzüne bir panel eklemesi gerekir. birbiri ardına ProducteurAuthFilterPanelInfoyapıştırıcıyı ProducteurAuthenticationFilter( filtre ^ ^) yapıştırmaktadır .

ProducteurAuthenticationFilterConfigOnun kurucu beyan eder:

setClassName(ProducteurAnonymousAuthenticationProvider.class.getName());
setName("producteur");

Filtre (ve Sağlayıcı)

Şimdi, sınıfların bir zincire dahil edilmesi için bir filtre oluşturması gerekiyordu (sanırım):

  • ProducteurAuthenticationFilter : genişleten GeoServerSecurityFilterve uygulayan filtre uygulamasıGeoServerAuthenticationFilter
  • ProducteurAnonymousAuthenticationProvider: Panel tarafından (yukarıdaki) yeni filtreyi tanımlamak için bir şekilde gerekli
  • ProducteurAuthenticationException: AuthenticationEntryPoint'te kullanılır (şimdilik yalnızca Http403ForbiddenEntryPoint)

Son olarak, fasulye şöyle tanımlanır:

<bean id="yaanonymousFilterProvider" class="dgarne.java.geoserver.security.ProducteurAnonymousAuthenticationProvider"/>

<bean id="producteurAuthPanelInfo" class="dgarne.java.geoserver.security.ProducteurAuthFilterPanelInfo">
    <property name="id" value="security.producteurAuthFilter" />
    <property name="shortTitleKey" value="ProducteurAuthFilterPanel.short"/>
    <property name="titleKey" value="ProducteurAuthFilterPanel.title"/>
    <property name="descriptionKey" value="ProducteurAuthFilterPanel.description"/>
</bean>

Oyunun sonunda, Web Yönetici Arayüzünde filtre panelinde yeni bir Öğe var ve varsayılan eşlemede kullandım (referanslar için aşağıdaki resme bakın): resim açıklamasını buraya girin

Sorun Açıklaması

Buradayız...

Varsayılan eşleme (/ **) ile eşleşen bir istemci (OpenLayers) tarafından verilen WFS isteğimin hiçbiri tanımlanan Filtreden geçmiyor. Hata ayıklama sırasında, Bahar Bağlamında tanımlanan filtre zincirlerinin asla tanımımı içermediğini, ancak her zaman anonim, sindirim veya temel kullanarak klasik zincirleri içerdiğini buldum ...

Soru

Öyleyse bana bunu nasıl yapmak zorunda olduğum hakkında (çok ^^) daha eksiksiz bir belge ile işaret edebilecek biri var mı?

Yanıtlar:


1

Ben böyle Proxy uygulayarak bunu bu denilen ediliyor katmanları için bağlantıyı kontrol edin ve kullanıcı eğer erişimi reddetmek: oturum değişkenleri kullanarak oturum olarak bir kullanıcının kimlik bilgilerini doğrulamak ve yalnızca onlar hak kazanırlar erişim kaynakları, yani onları olanak verebilecek bunları görüntüleme yetkisi yok.

Kullanıcıları belirli bir alan veya özellik kümesiyle sınırlamak istiyorsanız, iki yaklaşım vardır.

  1. Kullanıcının hangi verileri göreceğini kontrol etmek için Parametreli SQL Görünümlerini kullanın . Proxy'yi, URL'yi Geoserver'a geçirilmeden önce o kullanıcıya özgü parametrelerle değiştirmek için kullanabilirsiniz. Kullanıcı kimliği doğrulandıktan sonra parametreleri bir Ajax Çağrısı aracılığıyla Openlayers'a geri gönderebilir ve parametreleri OpenLayers'ta WMS getMAP çağrısının bir parçası olarak sağlayabilirsiniz. Görüntülenen gerçek veriler, görüntülenen verilere filtre uygulamak için SLD'deki Değişken ikamesi veya bir kullanıcının belirli bir katmanı görüntülemek için kullandığı SLD'yi değiştirmek için WMS getMap çağrılarınızda Harici Stiller kullanılarak işlenebilir.

  2. Yalnızca belirtilen bir alanın etrafında hareket etmesine izin vermek üzere Harita Uzantılarını belirlemek için Kullanıcı Kimlik Doğrulamasından Sonra bir Ajax Çağrısı kullanın . Hangi verilerin görüntülenebileceğini kısıtlamak için layerVisibility () öğesini de kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.