この章では、Java SEアプリケーションで認可を開発、構成する方法を説明するとともに、サポートされていない一部のメソッドについて示します。この章は次の項で構成されています。
ポリシー・モデルの詳細は、第20.3項「JAAS/OPSS認可モデル」を参照してください。
Java SEアプリケーションでのポリシー・ストアと資格証明ストアの構成について、次の各項で説明します。
Java SEアプリケーションの認証の構成の詳細は、第22.2項「Java SEアプリケーションの認証」を参照してください。
Java SEアプリケーションで認可が機能するためには、システム・プロパティを適切に設定しておく必要があります。すべてのプロパティのリストは、第F.1項「OPSSシステム・プロパティ」を参照してください。
Java SEアプリケーションでは、ファイルベース、LDAPベースまたはDBベースのストア・プロバイダを使用できます。これらのサービスはアプリケーション・ファイルjps-config-jse.xmlで構成します。
ファイルベースのポリシー・ストアはファイルsystem-jazn-data.xmlで指定し、ファイルベースの資格証明ストアはファイルcwallet.ssoで指定します(このウォレット・ファイルを、同じ名前のブートストラップ・ファイルcwallet.ssoと混同しないようにしてください。このブートストラップ・ファイルには、アプリケーション・セキュリティがLDAPベースの場合にLDAPストアにアクセスするための資格証明が格納されています)。
ウォレットの詳細は、第21.4.3項「ウォレットベースの資格証明ストアの使用」を参照してください。ブートストラップ資格証明の変更または追加の詳細は、第10.5.5項「modifyBootStrapCredential」および第10.5.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ベースのセキュリティ・ストアを使用する場合の前提条件」を参照してください。
次のコードは、Java SEアプリケーションで使用するLDAPベースのポリシー・ストアおよび資格証明ストアのプロバイダおよびインスタンスの構成を示しています。
<serviceProviders <serviceProvider type="POLICY_STORE" mame="ldap.policystore.provider" class=oracle.security.jps.internal.policystore.ldap.LdapPolicyStoreProvider"/> <serviceProvider type="CREDENTIAL_STORE" mame="ldap.credential.provider" class=oracle.security.jps.internal.credstore.ldap.LdapCredentialStoreProvider"/> </serviceProviders> <serviceInstances> <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.credential.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> </serviceInstances>
次のコードは、プログラムから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ベースのポリシー・ストアへの参照をプログラム的に取得する方法を示しています。ここでは、システム・プロパティ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データ・ソースの名前と同じにする必要があります。
ブートストラップ資格証明(マップとキー)の値は、ブートストラップ資格証明の作成時にWLSTスクリプトaddBootStrapCredentialに渡しものと一致させる必要があります。
次のコードは、ファイルjps-config-jse.xmlにおけるDBベースのポリシー・ストア、資格証明ストアおよびキーストアの構成を示しています。
<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