DynamicLoginConfig

Dynamic configuration of JAAS login

 

org.jboss.security.auth.login.DynamicLoginConfig

A security config mbean that loads an xml login configuration using the

XMLLoginConfig.loadConfig(URL config) operation on start, and unloads

the contained login module configurations on stop.

 

This allows you to specify JAAS login configuration as part of a deployment (or just as a standalone service) rather than having to edit the static conf/login-config.xml.

 

The service supports the following attributes:

  • AuthConfig: the resource path to the JAAS login configuration file to use. This defaults to login-config.xml

  • LoginConfigService: the XMLLoginConfig service name to use for loading. This service must support a String{FOOTNOTE DEF  } loadConfig(URL) operation to load the configurations.

  • SecurityManagerService: (3.2.6+) the SecurityManagerService name used to flush the registered security domains. This service must support an flushAuthenticationCache(String) operation to flush the case for the argument security domain. Setting this triggers the flush of the authentication caches when the service is stopped.

 

All you have to do is set up a service containing MBean that will load the login-config when the application is deployed:

 <server>
   <mbean code="org.jboss.security.auth.login.DynamicLoginConfig"
      name="jboss:service=DynamicLoginConfig">
      <attribute name="AuthConfig">META-INF/login-config.xml</attribute>
      <!-- The service which supports dynamic processing of login-config.xml
         configurations.
      -->
      <depends optional-attribute-name="LoginConfigService">
         jboss.security:service=XMLLoginConfig
      </depends>
      <!-- Optionally specify the security mgr service to use when
         this service is stopped to flush the auth caches of the domains
         registered by this service.
      -->
      <depends optional-attribute-name="SecurityManagerService">
         jboss.security:service=JaasSecurityManager
      </depends>
   </mbean>
 </server>

 

Basically, this will load the specified (AuthConfig) resource using the specified LoginConfigService MBean (the name here is the default, but it is configurable) by invoking loadConfig with the apropriate resource URL. When the service is stopped the configurations are removed.

 

The resource specified is loaded in the same way as the server login-config: it may be either an xml file, or a sun JAAS login configuration.  This example loads it from the META-INF of your SAR file.

 

Caution:

  • If you specify "login-config.xml" and don't have this file at the root of your SAR, the classloader will find and load the global login-config.xml without a warning(Ideally, specify META-INF/login-config.xml to be safe).  Your application appear as if you didn't specify the DynamicLoginConfig.  This is important because if you stop or undeploy the  DynamicLoginConfig service (with the global login-config.xml), then you will lose the jaas configuration for the security layer and security checks may fail. (Moral: It is better to specify a login-config.xml as part of your archive rather than defaulting to the global login-config.xml). This has been solved for

JBoss 4.0.5, 5.0 and 3.2.8.SP2  JBAS-3422

 

See also LoginConfiguration

 

Embedded Login Configuration

As of 4.0.3 there is support for embedding alernate xml documents as attribute values, and the DynamicLoginConfig has been updated to support an embedded configuration via the PolicyConfig attribute:

 

<?xml version="1.0" encoding="UTF-8"?>

<server>
   <!-- The custom JAAS login configuration that installs 
       a Configuration capable of dynamically updating the
       config settings
   -->
   <mbean code="org.jboss.security.auth.login.DynamicLoginConfig"
      name="jboss.security.tests:service=LoginConfig">
      <attribute name="PolicyConfig" serialDataType="jbxb">
         <jaas:policy
            xsi:schemaLocation="urn:jboss:security-config:4.1 resource:security-config_4_1.xsd"
            xmlns:jaas="urn:jboss:security-config:4.1"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            >
            <jaas:application-policy name="userinrole">
               <jaas:authentication>
                  <jaas:login-module code="org.jboss.security.auth.spi.XMLLoginModule"
                     flag="required">
                     <jaas:module-option name="userInfo">
                        <ur:users
                           xsi:schemaLocation="urn:jboss:user-roles:1.0 resource:user-roles_1_0.xsd"
                           xmlns:ur="urn:jboss:user-roles:1.0">
                           <ur:user name="jduke" password="theduke">
                              <ur:role name="ServletUserRole"></ur:role>
                              <ur:role name="AnotherUserRole"></ur:role>
                              <ur:role name="AuthorizedUser"></ur:role>
                              <ur:role name="callerJduke" group="CallerPrincipal"></ur:role>
                           </ur:user>
                        </ur:users>
                     </jaas:module-option>
                     <jaas:module-option name="unauthenticatedIdentity">guest</jaas:module-option>
                  </jaas:login-module>
               </jaas:authentication>
            </jaas:application-policy>
         </jaas:policy>         
      </attribute>
      <depends optional-attribute-name="LoginConfigService">
         jboss.security:service=XMLLoginConfig
      </depends>
      <depends optional-attribute-name="SecurityManagerService">
         jboss.security:service=JaasSecurityManager
      </depends>
   </mbean>

</server>

 

 

Better solution in JBoss Application Server v5.0 and Beyond

 

The old way of using the DynamicLoginConfig is still supported in JBAS5+.  A better alternative

solution is to create a deployment descriptor file of pattern xxx-jboss-beans.xml and have the

application policy definitions (primarily the authentication element) defined as shown in

Specifying Security Domain Configuration.

 

 

Referenced by: