![]() ![]() ![]() ![]() |
セキュリティ レルムは、WebLogic リソースを保護する複数のメカニズムで構成されています。各セキュリティ レルムは、コンフィグレーションされた一連のセキュリティ プロバイダから成ります。セキュリティ プロバイダは、セキュリティの特定の側面を扱うモジュール形式のコンポーネントです。レルム内のプロバイダを使用する JMX クライアントを作成して、ユーザやグループなどのセキュリティ データを追加または削除できます。プロバイダを追加または削除したり、レルム コンフィグレーションにその他の変更を加えたりするクライアントを作成することもできます。
以下の節では、JMX を使用したセキュリティ レルムの管理について説明します。
WebLogic セキュリティの詳細については、『WebLogic セキュリティについて』を参照してください。
他のサブシステムと同様に、WebLogic Server セキュリティ フレームワークでは MBean を 1 つの階層にまとめます。JMX クライアントは JMX オブジェクト名を作成せずに、その階層内を移動できます。ただし、セキュリティ レルムで使用できる MBean タイプは、レルムにインストールされたセキュリティ プロバイダによって異なり、各セキュリティ プロバイダで利用できるサービスは、プロバイダの作成方法によって異なります。
セキュリティ レルム階層のルートは RealmMBean
です。ルートには、そのレルムでコンフィグレーションされたすべてのプロバイダが含まれています。たとえば、Authorizers
属性には、レルムでコンフィグレーションされているすべての認可プロバイダが含まれています。WebLogic Server にはデフォルトのセキュリティ プロバイダが用意されているので、RealmMBean
Authorizers
属性にはデフォルトで DefaultAuthorizerMBean
が含まれています。ただし、これらのデフォルト プロバイダをアンインストールし、任意の数の独自のプロバイダまたはサード パーティのプロバイダで置き換えることができます。デフォルト セキュリティ プロバイダの詳細については、『WebLogic Server のセキュリティ』の「WebLogic セキュリティ プロバイダのコンフィグレーション」および「認証プロバイダのコンフィグレーション」を参照してください。
各セキュリティ プロバイダでは基本プロバイダ タイプを拡張する必要があります。たとえば、DefaultAuthorizerMBean
は AuthorizerMBean
を拡張しており、カスタムまたはサード パーティの認可プロバイダも AuthorizerMBean
を拡張します。JMX クライアントが RealmMBean
Authorizers
属性の値を取得する場合、MBean サーバは AuthorizerMBean
を拡張しているレルム内のすべての MBean を返します。JMX クライアントはプロバイダのリストを反復処理して、Name
属性の値や他の条件に基づいてプロバイダを選択できます。
省略可能な mix-in インタフェースを拡張して、基本プロバイダ タイプの機能を強化することができます。たとえば、認証プロバイダで UserEditorMBean
を拡張すると、プロバイダはレルムにユーザを追加できるようになります。
WebLogic Server のセキュリティ MBean はセキュリティ レルム内のセキュリティ プロバイダをコンフィグレーションします。以下の表では、さまざまなセキュリティ プロバイダをコンフィグレーションする MBean について説明します。
WebLogic セキュリティ プロバイダのコンフィグレーションの詳細については、『WebLogic Server のセキュリティ』の「WebLogic セキュリティ プロバイダのコンフィグレーション」および「認証プロバイダのコンフィグレーション」を参照してください。図 6-1 では、コンフィグレーション MBean 階層内の MBean の位置を示します。
weblogic.management.security.authentication.Authenticator を拡張する必要がある。認証プロバイダで WebLogic Security SPI を使用して ID アサーション サービスを提供する場合、その MBean は weblogic.management.security.authentication.IdentityAsserter を拡張する必要がある。
AuthenticationProviderMBean 」を参照。
|
|
ControlFlag がある。
AuthenticatorMBean 」を参照。
|
|
IdentityAsserterMBean 」を参照。
|
|
ServletAuthenticationFilterMBean 」を参照。
|
AdjudicatorMBean 」を参照。
|
|
DefaultAdjudicatorMBean 」を参照。
|
|
AuditorMBean 」を参照。
|
|
DefaultAuditorMBean 」を参照。
|
|
AuthorizerMBean 」を参照。
|
|
DeployableAuthorizerMBean 」を参照。
|
|
DefaultAuthorizerMBean 」を参照。
|
|
CredentialMapperMBean 」を参照。
|
|
DeployableCredentialMapperMBean 」を参照。
|
|
DefaultCredentialMapperMBean 」を参照。
|
|
PKICredentialMapperMBean 」を参照。
|
|
SAMLCredentialMapperMBean 」を参照。
|
|
CertPathProviderMBean 」を参照。
|
|
CertPathBuilderMBean 」を参照。
|
|
CertPathValidatorMBean 」を参照。
|
|
CertificateRegistryMBean 」を参照。
|
|
WebLogicCertPathProviderMBean 」を参照。
|
|
DeployableRoleMapperMBean を拡張する必要がある。
RoleMapperMBean 」を参照。
|
|
DeployableRoleMapperMBean 」を参照。
|
|
DefaultRoleMapperMBean 」を参照。
|
ContextHandlerMBean 」を参照。
|
|
GroupEditorMBean 」を参照。
|
|
GroupMemberListerMBean 」を参照。
|
|
GroupMembershipHierarchyCacheMBean 」を参照。
|
|
GroupReaderMBean 」を参照。
|
|
MemberGroupListerMBean 」を参照。
|
|
UserEditorMBean 」を参照。
|
|
UserLockoutManagerMBean 」を参照。
|
|
UserPasswordEditorMBean 」を参照。
|
|
UserReaderMBean 」を参照。
|
|
UserRemoverMBean 」を参照。
|
|
RoleEditorMBean 」を参照。
|
|
RoleListerMBean 」を参照。
|
|
RoleReaderMBean 」を参照。
|
|
PolicyEditorMBean 」を参照。
|
|
PolicyListerMBean 」を参照。
|
|
PolicyReaderMBean 」を参照。
|
|
PKICredentialMapEditorMBean 」を参照。
|
|
PKICredentialMapReaderMBean 」を参照。
|
|
UserPasswordCredentialMapEditorMBean 」を参照。
|
|
UserPasswordCredentialMapExtendedReaderMBean 」を参照。
|
|
UserPasswordCredentialMapReaderMBean 」を参照。
|
|
ImportMBean 」を参照。
|
|
ExportMBean 」を参照。
|
|
ListerMBean 」を参照。
|
|
NameListerMBean 」を参照。
|
|
LDAPServerMBean 」を参照。
|
|
ApplicationerVersionMBean 」を参照。
|
JMX を使用してセキュリティ レルムを管理する場合は、タスクに応じて 2 つの異なる MBean サーバを使用する必要があります。
たとえば、DefaultAuthenticatorMBean
の MinimumPasswordLength
属性の値は、ドメインのコンフィグレーション ドキュメントに格納されています。このドキュメントに対するすべての変更は WebLogic Server によって制御されているため、この属性の値を変更するには、編集 MBean サーバを使用してドメインのコンフィグレーションに対してロックを取得する必要があります。DefaultAuthenticatorMBean
の createUser
オペレーションは、LDAP サーバにデータを追加します。このオペレーションは WebLogic Server によって制御されていません。DefaultAuthenticatorMBean
のコンフィグレーションとそれが LDAP サーバで使用するデータの間で両立不能な変更が発生しないように、自身や別のユーザが MinimumPasswordLength
属性の変更を行っている場合には createUser
オペレーションを呼び出すことはできません。さらに、この属性の変更には WebLogic Server の再起動が必要になるため、サーバが再起動するまで createUser
オペレーションを呼び出すことができません。
セキュリティ プロバイダでは mix-in インタフェースを任意で拡張することができます。したがって、すべてのセキュリティ プロバイダがすべてのタスクを行えるわけではありません。このように柔軟性があるので、組織のセキュリティ設計者はセキュリティの要件に応じてレルムを設計できます。また、JMX クライアントの設計も、各レルムの設計やコンフィグレーションによって異なったものになります。
たとえば、次の 3 種類の認証プロバイダを含むレルムがあるとします。
このレルムの認証プロバイダを扱うには、JMX クライアントでは、適切なリポジトリにユーザを追加できるのはどの認証プロバイダかを判断できる必要があります。
表 6-4 では、タスクに適したセキュリティ プロバイダを検索する方法について説明します。
SQLAuthenticatorMBean を使用して顧客をレルムに追加する場合、JMX クライアントは SQLAuthenticatorMBean のインスタンスを検索することができる。
|
|
UserEditorMBean を拡張した認証プロバイダを検索できる。「使用可能なサービスの検索」を参照。
|
タイプまたは mix-in インタフェースで MBean を検索する JMX クライアントを作成するには、次の手順に従います。
すべての WebLogic Server インスタンスは独自の実行時 MBean サーバを保持しており、どのサーバの実行時 MBean サーバにも接続できます。
RuntimeServiceMBean
または DomainRuntimeServiceMBean
を使用して、WebLogic Server MBean 階層内を DomainMBean
、SecurityConfigurationMBean
、RealmMBean
の順に移動します。
「MBean 階層内の移動」を参照してください。
RealmMBean
属性の値を取得します。
たとえば、すべての認証プロバイダを取得するには、RealmMBean
AuthenticationProviders
属性の値を取得します。
RealmMBean
属性にあるセキュリティ プロバイダ MBean ごとに、MBean クラスの名前を取得します (コード リスト 6-1 を参照)。
『WebLogic Server MBean リファレンス』の各項目では、WebLogic Server プロバイダ MBean の完全修飾インタフェース名が示されています。サード パーティのプロバイダを使用する場合は、サード パーティのドキュメントでこの情報を参照してください。
たとえば、UserEditorMBean
mix-in インタフェースの完全修飾インタフェース名は weblogic.management.security.authentication.UserEditorMBean
です (『WebLogic Server MBean リファレンス』の「UserEditorMBean
」を参照)。
MBeanTypeService
MBean のオブジェクト名を作成します。
MBeanTypeService
MBean は常に次の javax.management.ObjectName
で登録されます。com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.MBeanTypeService
MBeanTypeService
MBean の getSubtypes( java.lang.String
beanInterface
)
オペレーションを呼び出します。ObjectName MBTservice = new ObjectName(
"com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.
MBeanTypeService");
for (int p = 0; atnProviders != null && p < atnProviders.length; p++) {
ModelMBeanInfo info = (ModelMBeanInfo)
mBeanServerConnection.getMBeanInfo(atnProviders[p]);
Descriptor desc = info.getMBeanDescriptor();
String className = (String)desc.getFieldValue("interfaceClassName");
String[] mba = (String[]) mBeanServerConnection.invoke( MBTservice,
"getSubtypes", new Object[] {
"weblogic.management.security.authentication.UserEditorMBean" },
new String[] { "java.lang.String" });
boolean isEditor = false;
for (int i = 0; i < mba.length; i++) {
if (mba[i].equals(className)){
userEditor = atnProviders[p];
isEditor = true;
break;
}
if (isEditor = true) break;
}
}
コード リスト 6-2 のサンプル コードでは、レルム内のすべての認証プロバイダを検索し、UserEditorMBean
を拡張している最初の認証プロバイダを使用して、ユーザをセキュリティ レルムに追加し、そのユーザを Administrators
グループに追加しています。
public ActionForward createNewAdmin(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws ClientException, Exception {
logger.info("Create New Admin");
CreateAdminBean user = (CreateAdminBean) form;
logger.debug(user.toString());
MBeanServerConnection mBeanServerConnection =
this.getDomainMBeanServerConnection(request);
ObjectName service = new
ObjectName("com.bea:Name=DomainRuntimeService,"+
"Type=weblogic.management.mbeanservers.domainruntime.
DomainRuntimeServiceMBean");
ObjectName domainMBean =
(ObjectName) mBeanServerConnection.getAttribute(service,
"DomainConfiguration");
ObjectName securityConfiguration =
(ObjectName) mBeanServerConnection.getAttribute(domainMBean,
"SecurityConfiguration");
ObjectName defaultRealm =
(ObjectName) mBeanServerConnection.
getAttribute(securityConfiguration, "DefaultRealm");
ObjectName[] atnProviders =
(ObjectName[]) mBeanServerConnection.getAttribute(defaultRealm,
"AuthenticationProviders");
ObjectName userEditor = null;
ObjectName MBTservice = new ObjectName(
"com.bea:Name=MBeanTypeService,Type=weblogic.management.mbeanservers.
MBeanTypeService");
for (int p = 0; atnProviders != null && p < atnProviders.length; p++) {
ModelMBeanInfo info = (ModelMBeanInfo)
mBeanServerConnection.getMBeanInfo(atnProviders[p]);
Descriptor desc = info.getMBeanDescriptor();
String className = (String)desc.getFieldValue("interfaceClassName");
String[] mba = (String[]) mBeanServerConnection.invoke( MBTservice,
"getSubtypes", new Object[] {
"weblogic.management.security.authentication.UserEditorMBean" },
new String[] { "java.lang.String" });
boolean isEditor = false;
for (int i = 0; i < mba.length; i++) {
if (mba[i].equals(className)){
userEditor = atnProviders[p];
isEditor = true;
break;
}
if (isEditor = true) break;
}
}
try {
mBeanServerConnection.invoke(
userEditor, "createUser",
new Object[] {user.getUsername(), user.getPassword(),
"MedRec Admininistator"},
new String[] {"java.lang.String", "java.lang.String",
"java.lang.String"}
);
} catch (MBeanException ex) {
Exception e = ex.getTargetException();
if (e instanceof AlreadyExistsException) {
logger.info("User, " + user.getUsername() + ", already exists.");
ActionErrors errors = new ActionErrors();
errors.add("invalidUserName",
new ActionError("invalid.username.already.exists"));
saveErrors(request, errors);
return mapping.findForward("create.new.admin");
} else {
logger.debug(e);
return mapping.findForward("create.new.admin");
}
}
try {
mBeanServerConnection.invoke(
userEditor, "addMemberToGroup",
new Object[] {"Administrators", user.getUsername()},
new String [] {"java.lang.String", "java.lang.String"}
);
mBeanServerConnection.invoke(
userEditor, "addMemberToGroup",
new Object[] {"MedRecAdmins", user.getUsername()},
new String [] {"java.lang.String", "java.lang.String"}
);
} catch (MBeanException ex) {
Exception e = ex.getTargetException();
if (e instanceof NameNotFoundException) {
logger.info("Invalid Group Name.");
ex.printStackTrace();
return mapping.findForward("create.new.admin");
} else {
logger.debug(e);
return mapping.findForward("create.new.admin");
}
}
logger.info("MedRec Administrator successfully created.");
return mapping.findForward("create.new.admin.successful");
}
セキュリティ プロバイダ MBean は認証や認可などのセキュリティの特定の側面を扱いますが、他の 2 つの MBean では、セキュリティに関する一般的な、レルム全体およびドメイン全体の側面を扱います。
RealmMBean
- セキュリティ レルムを表します。JMX クライアントはこの MBean を使用して、セキュリティ プロバイダを追加または削除します。また、Web コンテナや EJB コンテナはすべてのアクセスでセキュリティ フレームワークを呼び出すか、またはデプロイメント記述子にセキュリティが設定されるときにのみ呼び出すかなどの動作を指定します。SecurityConfigurationMBean
- 接続フィルタや、Web アプリケーション コンテナ内のセキュリティ制約、サーブレット、フィルタ、仮想ホストおよび外部セキュリティ ポリシーに対する URL パターン マッチングの動作などの、ドメイン全体のセキュリティ設定を指定します。
これらの 2 つの MBean では WebLogic Server コンフィグレーション ファイルにデータを永続化します。そのため、RealmMBean
または SecurityConfigurationMBean
の属性値を変更するには、「JMX を使用したドメインのコンフィグレーションの管理」で説明されているように、編集 MBean サーバと ConfigurationManagerMBean
を使用する必要があります。
![]() ![]() ![]() |