239.8. HTTP Basic 認証の使用

以下に示すように、Netty HTTP コンシューマーは、使用するセキュリティーレルム名を指定することにより、HTTP Basic 認証をサポートします。

<route>
   <from uri="netty-http:http://0.0.0.0:{{port}}/foo?securityConfiguration.realm=karaf"/>
   ...
</route>

Basic 認証を有効にするには、レルム名が必須です。デフォルトでは、JAAS ベースのオーセンティケーターが使用されます。これは、指定されたレルム名 (上記の例では karaf) を使用し、JAAS レルムとこのレルムの JAAS \{{LoginModule}} を認証に使用します。

Apache Karaf/ServiceMix のエンドユーザーはすぐに使用できる karaf レルムを持っているため、上記の例がこれらのコンテナーですぐに機能する理由です。

239.8.1. Web リソースに ACL を指定する

org.apache.camel.component.netty.http.SecurityConstraint を使用すると、Web リソースに対する制約を定義できます。また、org.apache.camel.component.netty.http.SecurityConstraintMapping はすぐに使用できるように提供されており、ロールを使用してインクルージョンとエクスクルージョンを簡単に定義できます。

たとえば、XML DSL で以下に示すように、制約 Bean を定義します。

  <bean id="constraint" class="org.apache.camel.component.netty.http.SecurityConstraintMapping">
    <!-- inclusions defines url -> roles restrictions -->
    <!-- a * should be used for any role accepted (or even no roles) -->
    <property name="inclusions">
      <map>
        <entry key="/*" value="*"/>
        <entry key="/admin/*" value="admin"/>
        <entry key="/guest/*" value="admin,guest"/>
      </map>
    </property>
    <!-- exclusions is used to define public urls, which requires no authentication -->
    <property name="exclusions">
      <set>
        <value>/public/*</value>
      </set>
    </property>
  </bean>

上記の制約は、次のように定義されます。

  • /* へのアクセスは制限され、すべてのロールが受け入れられます (ユーザーがロールを持っていない場合も同様)
  • /admin/* へのアクセスには管理者ロールが必要です
  • /guest/* へのアクセスには、管理者またはゲストのロールが必要です
  • /public/* へのアクセスは、認証が不要であることを意味するエクスクルージョンであるため、ログインしなくても全員に公開されます

この制約を使用するには、以下に示すように Bean ID を参照するだけです。

<route>
   <from uri="netty-http:http://0.0.0.0:{{port}}/foo?matchOnUriPrefix=true&amp;securityConfiguration.realm=karaf&amp;securityConfiguration.securityConstraint=#constraint"/>
   ...
</route>