18.2.8. アプリケーションでのセキュリティードメインの使用
概要
アプリケーションでセキュリティードメインを使用するには、最初にサーバーの設定でセキュリティードメインを定義してから、アプリケーションの展開記述子でアプリケーションに対してセキュリティードメインを有効にする必要があります。次に、それを使用する EJB に必要なアノテーションを追加する必要があります。このトピックでは、アプリケーションでセキュリティードメインを使用するために必要な手順について説明します。
警告
アプリケーションが、認証キャッシュを使用するセキュリティードメインの一部である場合、セキュリティードメインの他のアプリケーションもそのアプリケーションのユーザー認証を使用できます。
手順18.1 セキュリティードメインを使用するようアプリケーションを設定
セキュリティードメインの定義
サーバーの設定ファイルでセキュリティードメインを定義した後、アプリケーションの記述子ファイルでアプリケーションに対して有効にする必要があります。サーバーの設定ファイルへセキュリティードメインを設定
セキュリティードメインは、サーバーの設定ファイルのセキュリティー
サブシステムで設定されます。JBoss EAP 6 インスタンスが管理対象ドメインで実行されている場合、これはdomain/configuration/domain.xml
ファイルです。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、これはstandalone/configuration/standalone.xml
ファイルです。他
のjboss-web-policy
およびjboss-ejb-policy
セキュリティードメインは、JBoss EAP 6 でデフォルトで提供されます。次の XML の例は、サーバーの設定ファイルのセキュリティー
サブシステムからコピーされたものです。Thecache-type
セキュリティードメインの属性は、認証チェックを高速化するためのキャッシュを指定します。許可される値は、デフォルト
でキャッシュとして単純なマップを使用するか、infinispan
で Infinispan キャッシュを使用します。<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-domains> <security-domain name="other" cache-type="default"> <authentication> <login-module code="Remoting" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="RealmDirect" flag="required"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain> <security-domain name="jboss-web-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> <security-domain name="jboss-ejb-policy" cache-type="default"> <authorization> <policy-module code="Delegating" flag="required"/> </authorization> </security-domain> </security-domains> </subsystem>
管理コンソールまたは CLI を使用して、追加のセキュリティードメインを必要に応じて設定できます。アプリケーションの記述子ファイルでのセキュリティードメインの有効化
セキュリティードメインは、アプリケーションのWEB-INF/jboss-web.xml
ファイルの<jboss-web>
要素の<security-domain>
子要素で指定されます。次の例では、my-domain
という名前のセキュリティードメインを設定します。<jboss-web> <security-domain>my-domain</security-domain> </jboss-web>
これは、WEB-INF/jboss-web.xml
記述子で指定できる多くの設定の 1 つにすぎません。
EJB への必要なアノテーションの追加
@SecurityDomain
および@RolesAllowed
アノテーションを使用して、EJB でセキュリティーを設定します。次の EJB コード例は、ゲスト
ロールのユーザーによる他の
セキュリティードメインへのアクセスを制限します。package example.ejb3; import java.security.Principal; import javax.annotation.Resource; import javax.annotation.security.RolesAllowed; import javax.ejb.SessionContext; import javax.ejb.Stateless; import org.jboss.ejb3.annotation.SecurityDomain; /** * Simple secured EJB using EJB security annotations * Allow access to "other" security domain by users in a "guest" role. */ @Stateless @RolesAllowed({ "guest" }) @SecurityDomain("other") public class SecuredEJB { // Inject the Session Context @Resource private SessionContext ctx; /** * Secured EJB method using security annotations */ public String getSecurityInfo() { // Session context injected using the resource annotation Principal principal = ctx.getCallerPrincipal(); return principal.toString(); } }
その他のコード例は、Red Hat カスタマーポータルより入手できる JBoss EAP 6 Quickstarts バンドルのejb-security
クイックスタートを参照してください。注記EJB のセキュリティードメインは、jboss-ejb3.xml
デプロイメント記述子を使用して設定することもできます。詳細は、「jboss-ejb3.xml デプロイメント記述子の参照」 を参照してください。
手順18.2 EJB3Bean のカスタムプリンシパルにアクセスするように JBoss EAP 6 を設定します
- JAAS に従うように ApplicationRealm を設定します。
<security-realm name="MyDomainRealm"> <authentication> <jaas name="my-security-domain"/> </security-realm>
- カスタムプリンシパルを使用するように JAAS セキュリティードメインを設定します。
<security-domain name="my-security-domain" cache-type="default"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="file:///${jboss.server.config.dir}/users.properties"/> <module-option name="rolesProperties" value="file:///${jboss.server.config.dir}/roles.properties"/> <module-option name="principalClass" value="org.jboss.example.CustomPrincipalImpl"/> </login-module> </authentication> </security-domain>
- カスタムプリンシパルを JBoss モジュールとしてデプロイします。
- を設定します
org.jboss.as.remoting
モジュール (modules/org/jboss/as/remoteing/main/module.xml
) は、カスタムプリンシパルを含むモジュールに依存します。<resources> <resource-root path="jboss-as-remoting-7.1.2.Final-redhat-1.jar"/> <!-- Insert resources here --> </resources> <dependencies> <module name="org.jboss.staxmapper"/> <module name="org.jboss.as.controller"/> <module name="org.jboss.as.domain-management"/> <module name="org.jboss.as.network"/> <module name="org.jboss.as.protocol"/> <module name="org.jboss.as.server"/> <module name="org.jboss.as.security" optional="true"/> <module name="org.jboss.as.threads"/> <module name="org.jboss.logging"/> <module name="org.jboss.modules"/> <module name="org.jboss.msc"/> <module name="org.jboss.remoting3"/> <module name="org.jboss.sasl"/> <module name="org.jboss.threads"/> <module name="org.picketbox" optional="true"/> <module name="javax.api" /> <module name="org.jboss.example" /> <!--FIXME: dependency on custom principal added here --> </dependencies>
- 使用するクライアントを設定する
org.jboss.ejb.client.naming
、jboss-ejb-client.properties
ファイルは次のようになります。remote.connections=default endpoint.name=client-endpoint remote.connection.default.port=4447 remote.connection.default.host=localhost remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false # The following setting is required when deferring to JAAS remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false remote.connection.default.username=admin remote.connection.default.password=testing