この章では、JavaEEアプリケーションで認可を開発、構成する方法を説明すとともに、サポートされていない一部のメソッドについて示します。この章は次の項で構成されています。
認可モデルの詳細は、第19.3項「JAAS/OPSS認可モデル」を参照してください。
この章の情報では、第18.3.3項「プログラム的な認可」の内容を十分に理解していることが前提となっています。
JavaSEアプリケーションでのポリシー・ストアと資格証明ストアの構成について、次の各項で説明します。
JavaSEアプリケーション向け認証の構成の詳細は、第22.2項「JavaSEアプリケーション向け認証の開発」を参照してください。
JavaSEアプリケーションで認可が機能するためには、システム・プロパティを適切に設定しておく必要があります。すべてのプロパティのリストは、第F.1項「OPSSシステム・プロパティ」を参照してください。
JavaSEアプリケーションでは、ファイルベース、LDAPベース、またはDBベースのストア・プロバイダを使用できます。これらのサービスはアプリケーション・ファイルjps-config-jse.xml
で構成します。
ファイルベースのポリシー・ストアはファイルsystem-jazn-data.xml
で指定し、ファイルベースの資格証明ストアはファイルcwallet.sso
で指定します(このウォレット・ファイルを、同じ名前のブートストラップ・ファイルcwallet.sso
と混同しないようにしてください。このブートストラップ・ファイルには、アプリケーション・セキュリティがLDAPベースの場合にLDAPストアにアクセスするための資格証明が格納されています)。
ウォレットの詳細は、第21.4.3項「ウォレットベースの資格証明ストアの使用」を参照してください。ブートストラップ資格証明の変更または追加の詳細は、第10.4.5項「modifyBootStrapCredential」および第10.4.6項「addBootStrapCredential」を参照してください。
次のコードは、ファイルベースのポリシー・ストアと資格証明ストアおよびそれらを参照するjpsContextの構成を示しています。
<serviceProviders> <serviceProvider type="CREDENTIAL_STORE" name="credstoressp" class="oracle.security.jps.internal.credstore.ssp.SspCredentialStoreProvider"> <description>SecretStore-based CSF Provider</description> </serviceProvider> <serviceProvider type="POLICY_STORE" name="policystore.xml.provider" class="oracle.security.jps.internal.policystore.xml.XmlPolicyStoreProvider"> <description>XML-based PolicyStore Provider</description> </serviceProvider> </serviceProviders> <serviceInstances> <serviceInstance name="credstore" provider="credstoressp" location="./"> <description>File-based Credential Store Service Instance</description> </serviceInstance> <serviceInstance name="policystore.xml" provider="policystore.xml.provider" location="./system-jazn-data.xml"> <description>File-based Policy Store Service Instance</description> <property name="oracle.security.jps.policy.principal.cache.key" value="false"/> </serviceInstance> </serviceInstances> <jpsContexts default="TestJSE"> <jpsContext name="TestJSE"> <serviceInstanceRef ref="credstore"/> <serviceInstanceRef ref="policystore.xml"/> ... </jpsContext> ... </jpsContexts>
ポリシー・ストアのインスタンスでプロパティoracle.security.jps.policy.principal.cache.keyをfalseに設定する必要がある点に留意してください。
この項では、LDAPベースのストアをポリシー・ストアおよび資格証明ストアとして使用するように設定していることが前提となっています。Oracle Internet Directoryでのノードの設定の詳細は、第8.2.2項「LDAPベースのセキュリティ・ストアを使用する場合の前提条件」を参照してください。
次のコードは、JavaSEアプリケーションで使用するLDAPベースのポリシー・ストアおよび資格証明ストアのインスタンスの構成を示しています。
<serviceInstance provider="ldap.policystore.provider" name="policystore.ldap"> <property value="OID" name="policystore.type"/> <property value="bootstrap" name="bootstrap.security.principal.key"/> <property value="cn=PS1domainRC3" name="oracle.security.jps.farm.name"/> <property value="cn=myTestNode" name="oracle.security.jps.ldap.root.name"/> <property value="ldap://myComp.com:1234" name="ldap.url"/> </serviceInstance> <serviceInstance provider="ldap.credentialstore.provider" name="credstore.ldap"> <property value="bootstrap" name="bootstrap.security.principal.key"/> <property value="cn=PS1domainRC3" name="oracle.security.jps.farm.name"/> <property value="cn=myTestNode" name="oracle.security.jps.ldap.root.name"/> <property value="ldap://myComp.com:1234" name="ldap.url"/> </serviceInstance>
次のコードは、プログラムからLDAPサーバーにアクセスできるようにするためのブートストラップ資格証明ファイル(cwallet.sso
)の構成を示しています。
<serviceInstance location="./bootstrap" provider="credstoressp" name="bootstrap.cred"> <property value="./bootstrap" name="location"/> </serviceInstance>
次のコードは、前述のインスタンスを参照するために必要なjpsContextsの構成を示しています。
<jpsContexts default="TestJSE"> <jpsContext name="TestJSE"> <serviceInstanceRef ref="policystore.ldap"/> <serviceInstanceRef ref="credstore.ldap"/> </jpsContext> <jpsContext name="bootstrap_credstore_context"> <serviceInstanceRef ref="bootstrap.cred"/> </jpsContext> </jpsContexts>
次のコードは、上記で構成したLDAPベースのポリシー・ストアへの参照をプログラム的に取得する方法を示しています。ここでは、環境で次のようにシステム・プロパティが設定されていることが前提となっています。
jps.policystore.hybrid.mode
: true
oracle.security.jps.config
: ファイルjps-config-jse.xml
の場所
String contextName="TestJSE"; ... public static PolicyStore getPolicyStore(String contextName) { try-block JpsContextFactory ctxFact; ctxFact = JpsContextFactory.getContextFactory(); JpsContext ctx = ctxFact.getContext(contextName); return ctx.getServiceInstance(PolicyStore.class); catch-block ...
この項では、DBベースのストアをOPSSセキュリティ・ストアとして使用するように設定していることが前提となっています。DBでのノードの設定の詳細は、第8.3.1項「DBベースのセキュリティ・ストアを使用する場合の前提条件」を参照してください。
この後に示す構成サンプルでは、次の重要事項に留意してください。
構成プロパティjdbc.url
の値は、データ・ソースの作成時に入力したJDBCデータ・ソース名と一致させます。詳細は、第8.3.1.3項「データソース・インスタンスの作成」を参照してください。
ブートストラップ資格証明(マップとキー)の値は、ブートストラップ資格証明の作成時にWLSTスクリプトaddBootStrapCredential
に渡しものと一致させる必要があります。
次のコードは、ファイルjps-config-jse.xml
におけるDBベースのポリシー・ストア、資格証明ストアおよびキー・ストアの構成を示しています。この構成はJ2SEアプリケーションにのみ有効です。
<jpsConfig …> <propertySets> <propertySet name="props.db.1"> <property value="cn=myDomain" name="oracle.security.jps.farm.name"/> <property value="DB_ORACLE" name="server.type"/> <property value="cn=myRoot" name="oracle.security.jps.ldap.root.name"/> <property name="jdbc.url" value="jdbc:oracle:thin:@myhost.com:1521/srv_name"/> <property name="jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="bootstrap.security.principal.key" value="myKeyName" /> <property name="bootstrap.security.principal.map" value="myMapName" /> </propertySet> </propertySets> <serviceProviders> <serviceProvider class="oracle.security.jps.internal.policystore.OPSSPolicyStoreProvider" type="POLICY_STORE" name="policy.rdbms"> <description>DBMS based PolicyStore</description> </serviceProvider> <serviceProvider class="oracle.security.jps.internal.credstore.rdbms.DbmsCredentialStoreProvider" type="CREDENTIAL_STORE" name="db.credentialstore.provider" > <serviceProvider class="oracle.security.jps.internal.keystore.KeyStoreProvider" type="KEY_STORE" name="keystore.provider" > <property name="provider.property.name" value="owsm"/> </serviceProvider> </serviceProviders> <serviceInstances> <serviceInstance name="policystore.rdbms" provider="db.policystore.provider"> <propertySetRef ref = "props.db.1"/> <property name="policystore.type" value="DB_ORACLE"/> </serviceInstance> <serviceInstance name="credstore.rdbms" provider="db.credstore.provider"> <propertySetRef ref = "props.db.1"/> </serviceInstance> <serviceInstance name="keystore.rdbms" provider="db.keystore.provider"> <propertySetRef ref = "props.db.1"/> <property name="keystore.provider.type" value="db"/> </serviceInstance> </serviceInstances> <jpsContexts default="default"> <jpsContext name="default"> <serviceInstanceRef ref="policystore.rdbms"/> <serviceInstanceRef ref="credstore.rdbms"/> <serviceInstanceRef ref="keystore.rdbms"/> </jpsContext> </jpsContexts> </jpsConfig>
このリリースでは、ファイルベースのポリシー・ストアに対して、次の機能に関連するメソッドはサポートされていません。
一括認可
複雑な問合せ
カスケード削除
一括認可は、インタフェースoracle.security.jps.service.policystore
の次のメソッドでカプセル化されます。
java.util.Set<ResourceActionsEntry> checkBulkAuthorization(javax.security.auth.Subject subject, java.util.Set<ResourceActionsEntry> requestedResources) throws PolicyStoreException
複雑な問合せは、問合せを実行するすべてのメソッドに関連します。ポリシー・ストアがファイルベースの場合、問合せは単純であることが必要です。ファイルベースのポリシー・ストアを使用している場合に、問合せを実行するメソッドに複雑な問合せを渡すとそのメソッドは例外をスローします。
単純な問合せとは、検索条件が1つのみの問合せであり、複雑な問合せとは、複数の検索条件を持つ問合せです。addQuery
をコールするたびに問合せには条件が1つ追加されます。
次のコードは、表示名が文字列MyDisplayName
に一致するすべてのパーミッションを返す単純なクエリーの構造を示しています。
PermissionSetSearchQuery query = new PermissionSetSearchQuery(); query.addQuery(PermissionSetSearchQuery.SEARCH_PROPERTY.DISPLAY_NAME, false, ComparatorType.EQUALITY, "MyDisplayName", BaseSearchQuery.MATCHER.EXACT); getPermissionSets(query);
次の例は、指定したリソース・タイプおよび指定したリソース・インスタンス名を持つすべてのパーミッション・セットを返す複雑な問合せの構造を示しています。
PermissionSetSearchQuery query = new PermissionSetSearchQuery(); query.addQuery(PermissionSetSearchQuery.SEARCH_PROPERTY.RESOURCE_TYPE, false, ComparatorType.EQUALITY, "MyResourceType", BaseSearchQuery.MATCHER.EXACT); query.addQuery(PermissionSetSearchQuery.SEARCH_PROPERTY.RESOURCE_NAME, false, ComparatorType.EQUALITY, "MyResourceInstanceName", BaseSearchQuery.MATCHER.EXACT); query.setANDMatch(); getPermissionSets(query);
カスケード削除は、ブール型引数cascadeDelete
を使用するメソッドに関連します。ポリシー・ストアがファイルベースの場合にこの引数に指定できる唯一の値は、FALSEです。インタフェースResourceTypeManager
でのこのようなメソッドの例を次に示します。
void deleteResourceType(EntryReference rtRef, boolean cascadeDelete) throws PolicyObjectNotFoundException, PolicyStoreOperationNotAllowedException, PolicyStoreException