GeoServer 2.3.0でカスタム認証フィルターを作成する


10

環境

現在のプロジェクトでは、GeoServer(2.3.0)へのリクエストが許可されていることを検証する必要があります。

プロジェクトはそれらの事実を保持します:

  • GSクライアントはプリンシパル情報(たとえばパスワード)を提供できません。GS自体はユーザー/ロールリポジトリと接続していません

そこで、それを確認するためにauthフィルターメカニズムを使用する機会を得ました。

  • (特定のWFS層への)有効なリクエストには、特別なHTTPヘッダーが含まれます(X-CUSTOM-VALIDとしましょう)
  • このヘッダーはJSONエンコードされたメッセージで、有効な3番目のシステム(ユーザー名、シークレットなど)に接続されたクライアントによって要求が開始されたことを検証するのに十分な情報を保持しています。

状態

ドキュメントには、我々はそうすることができるはずと私たちに言っています...

ただし、ドキュメントには、そのようなコンポーネントの作成方法と構成方法が明確ではありません。

GeoServerのデバッグこのようなフィルターを構成するには、専用の認証プロバイダーが必要であることがわかりました。それは、Web管理インターフェースにパネルを配置するために(認証の下、認証フィルターリスト内)

パネル

したがって、私のコードはこれらのファイルで構成されています。

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

これらは、Web管理インターフェースでパネルを追加するために必要です。ProducteurAuthFilterPanelInfoは来世ProducteurAuthenticationFilter(THE フィルター ^^)と一緒に他の2つを接着しています。

ProducteurAuthenticationFilterConfigそのコンストラクタでそれを宣言します。

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

フィルター(およびプロバイダー)

さて、チェーンに含まれるフィルターを作成するために必要なクラス(おそらく):

  • ProducteurAuthenticationFilter:フィルター実装の拡張GeoServerSecurityFilterと実装GeoServerAuthenticationFilter
  • ProducteurAnonymousAuthenticationProvider:新しいフィルターを定義するために、どういうわけかパネル(上記)に必要
  • ProducteurAuthenticationException:AuthenticationEntryPointで使用(現時点ではHttp403ForbiddenEntryPointのみ)

最後に、Beanは次のように定義されています。

<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>

ゲームの最後に、Web管理インターフェイスのフィルターパネルに新しいアイテムがあり、それをデフォルトのマッピングで使用しました(下の画像を参照してください)。 ここに画像の説明を入力してください

問題の説明

ここにいます...

クライアント(OpenLayers)が発行した私のデフォルトのマッピング(/ **)に一致するWFS要求は、定義されたフィルターを通過しません。デバッグ中に、Spring Contextで定義されたフィルターチェーンに私の定義が含まれているのではなく、常に、匿名、ダイジェスト、または基本のいずれかを使用する古典的なチェーンが含まれていることがわかりました...

質問

それで、私がどのようにそれをしなければならないかについての(より多くの^^)より完全なドキュメントで私を指摘できる誰かがいますか?

回答:


1

セッション変数を使用してログインしたユーザーの資格情報を確認し、資格のあるリソースへのアクセスのみを許可する、このようなプロキシを実装することで、つまり、呼び出されているレイヤーのURLを確認し、ユーザーのアクセスを拒否しますそれらを表示する権限がありません。

ユーザーを特定の領域または機能セットに制限する場合は、2つの方法があります。

  1. パラメータ化されたSQLビューを使用して、ユーザーが表示するデータを制御します。プロキシを使用して、そのユーザーに固有のパラメータでGeoserverに渡される前にURLを変更できます。ユーザーが認証された後、Ajax呼び出しを介してパラメーターをOpenlayersに送り返し、OpenLayersのWMS getMAP呼び出しの一部としてパラメーターを提供することもできます。表示される実際のデータは、SLDの変数置換、またはWMS getMap呼び出しで外部スタイルを使用してユーザーが特定のレイヤーを表示するために使用するSLDを変更することで処理できます。

  2. ユーザー認証後にAjax呼び出しを使用してマップ範囲を指定し、ユーザーが指定された領域内を移動することのみを許可します。また、layerVisibility()を使用して、表示できるデータを制限することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.