Daniel Cullender [
http://community.jboss.org/people/cullendw] modified the document:
"Simple LDAP Authentication for EJB3"
To view the document, visit:
http://community.jboss.org/docs/DOC-15790
--------------------------------------------------------------
There are plenty articles available describing how to set up parts of LDAP authentication
for EJB3, but I battled to find an article which pulls everthing together (If I have
missed one, please provide a link). I will break the process we went through into four
easy steps.
h4. Step 1 : Login and browse your LDAP server
This is an important step since you need to verify that your LDAP connection and logon
details are correct. You also need to make sure that your Distinguished Name (DN) is
correct. We used an excellent
http://directory.apache.org/studio/ldap-browser-plugin.html
LDAP Eclipse plugin by Apache to do this. After logging on (remember that your username
needs a @ domain attached to it) we could browse our LDAP server and confirm that all our
LDAP configuration was correct.
Make sure that your LDAP group (example : *YourGroupName*) has been configured properly
and that all the members have been set up. This group is the security role you will
configure on your ejb.
h4. Step 2 : Setup you JBoss Security Domain (login-config.xml)
Configuring a JBoss LDAP Security Domain is really simple. The is a LDAP module available
:
org.jboss.security.auth.spi.LdapLoginModule
Please
http://community.jboss.org/docs/DOC-11253 refer to this comprehensive article for
all the ways to configure the module. Our configuration looks as follows:
<application-policy
name="*your-configured-security-domain*">
<authentication>
<login-module code="org.jboss.security.auth.spi.LdapLoginModule"
flag="required" >
<module-option
name="java.naming.provider.url">ldap://ldap-server-name:1389/</module-option>
<module-option name="rolesCtxDN">OU=Current,OU=User
Accounts,OU=bar,DC=foo,DC=co,DC=za</module-option>
<module-option
name="matchOnUserDN">false</module-option>
<module-option
name="principalDNSuffix">(a)foo.co.za</module-option>
<module-option
name="uidAttributeID">sAMAccountName</module-option>
<module-option
name="roleAttributeID">memberOf</module-option>
<module-option
name="roleAttributeIsDN">true</module-option>
<module-option
name="roleNameAttributeID">name</module-option>
</login-module>
</authentication>
</application-policy>
h4. Step 3 : EJB3 setup
Now that we have our Security Domain configured, all we need to do now is to configure our
EJB. Using the following standard Class Level annotation :
@SecurityDomain("*your-configured-security-domain*")
you tell your EJB which security domain to use. The next annotations tells your EJB which
roles to allow (This is your LDAP group which your user should be a member of):
@RolesAllowed("*YourGroupName*")
This annotation can be put on a Class or method level depending on the granularity
required. There are plenty of other annotations to configured the granularity (example :
@PermitAll) but our requirement was to lock down all our EJB's remote interface calls
with a single role.
h4. Step 4 : EJB Client
When you get your initial context as a client, make sure that you use Login Initial
Context Factory :
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
prop.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
prop.put(Context.PROVIDER_URL, "jnp://dev-qut6:1099");
prop.put(Context.SECURITY_PRINCIPAL, "dcu");
prop.put(Context.SECURITY_CREDENTIALS, "Gua2010");
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.jboss.security.jndi.JndiLoginInitialContextFactory");
Properties prop = new Properties();
prop.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
prop.put(Context.URL_PKG_PREFIXES, "jboss.naming:org.jnp.interfaces");
prop.put(Context.PROVIDER_URL, "jnp://localhost:1099");
prop.put(Context.SECURITY_PRINCIPAL, "username");
prop.put(Context.SECURITY_CREDENTIALS, "password");
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"*org.jboss.security.jndi.JndiLoginInitialContextFactory*");
And you are done.
--------------------------------------------------------------
Comment by going to Community
[
http://community.jboss.org/docs/DOC-15790]
Create a new document in EJB 3.0 at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=102&am...]