[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [xmlblaster-devel] forcing authentication via ldap?
Brad Clements wrote:
On 6 May 2006 at 22:20, Marcel Ruff wrote:
The client needs to send the specific SecurityQos markup as expected
by the server plugin:
<securityService type="ldap" version="1.0">
<user>joe</user>
<passwd>secret</passwd>
</securityService>
what would you want to send instead?
I find this security architecture to be very strange. The very idea that the client,
who is not yet authenticated, can tell the server which authentication service to
use, seems bizarre. I suppose it's ok if the server can be configured to only
support a single authentication type.
So you like to send credentials like this:
<securityService>
<user>joe</user>
<passwd>secret</passwd>
</securityService>
The server then automatically chooses the default authentication mode
as you have described below - sounds reasonable -
but needs to be implemented in org.xmlBlaster.authentication.plugins.PluginManager.java
However in my test, I commented out every security.server plugin (including
htpasswd) and I still was able to authenticate with a fabricated userid and
password.
It falls back to htpasswd, please try to set
Security.Server.Plugin.htpasswd.secretfile=${user.home}${file.separator}xmlBlaster.htpasswd
(take a copy from xmlBlaster/config/xmlBlaster.htpasswd)
and try
java HelloWorld3 -session.name guest -passwd secret
or
java HelloWorld3 -session.name guest -passwd secretXX
In my use case, I want every client to authenticate via ldap. I will be running
xmlBlaster on an "open port", I cannot rely on potential hackers to specify
type="ldap" when they connect ;-)
(So, when I get SSL working I'll use certs to help protect xmlBlaster, but until then
...)
You can probably try to force the ldap plugin as a server side default
like this:
Security.Server.Plugin[htpasswd][1.0]=org.xmlBlaster.authentication.pl
ugins.ldap.ClientPlugin
but i haven't tried it.
It doesn't work, see below
Hmm, we should change the plugin manager code to allow a nicer way to
change the default plugin...
I think there needs to be an explicit way to say "these are the allowed
authentication methods, and here's the order they should be tried if the client
didn't specify the type".
Or even, a mapping that says, these IP addresses can use these authentication
methods.
Which leads to this problem. I tried tricking htpasswd to by ldap, and during
startup it fails.
May 7, 2006 10:47:01 AM INFO 10-XmlBlaster.MainThread org.xmlBlaster.authentication.plugins.ldap.Session <init>: Initializing LDAP access on ldap.serverUrl='ldap://ldap.strader-ferris.com:389/dc=strader-ferris,dc=com' with rootdn='cn=Manager,dc=strader-ferris,dc=com'. The unique uid field name in ldap should be 'uid'.
May 7, 2006 10:47:01 AM SEVERE 10-XmlBlaster.MainThread org.xmlBlaster.authentication.Authenticate connect: PANIC: Access is denied: org.xmlBlaster.authentication.plugins.htpasswd.SecurityQos
java.lang.ClassCastException: org.xmlBlaster.authentication.plugins.htpasswd.SecurityQos
at org.xmlBlaster.authentication.plugins.ldap.Session.init(Session.java:72)
at org.xmlBlaster.authentication.Authenticate.connect(Authenticate.java:300)
at org.xmlBlaster.authentication.AuthenticateProtector.connect(AuthenticateProtector.java:77)
at org.xmlBlaster.authentication.AuthenticateProtector.connect(AuthenticateProtector.java:65)
at org.xmlBlaster.protocol.jdbc.JdbcDriver.activate(JdbcDriver.java:187)
at org.xmlBlaster.protocol.jdbc.JdbcDriver.init(JdbcDriver.java:113)
at org.xmlBlaster.util.plugin.PluginManagerBase.instantiatePluginSecondPhase(PluginManagerBase.java:258)
at org.xmlBlaster.util.plugin.PluginManagerBase.getPluginObject(PluginManagerBase.java:107)
at org.xmlBlaster.engine.runlevel.RunlevelManager.startupPlugins(RunlevelManager.java:294)
at org.xmlBlaster.engine.runlevel.RunlevelManager.changeRunlevel(RunlevelManager.java:225)
at org.xmlBlaster.Main.init(Main.java:181)
at org.xmlBlaster.Main.<init>(Main.java:117)
at org.xmlBlaster.Main.main(Main.java:600)
But watching the ldap connection with ethereal, xmlBlaster does bind
successfully, and I don't see any other ldap requests. So, it seems like xmlblaster,
during startup, is trying to login to itself? .. and it doesn't actually send any
requests to the ldap server for that login.
Please see the few classes in
xmlBlaster/src/java/org/xmlBlaster/authentication/plugins/ldap
and read the javadoc there.
If your approach is only slightly different you could add a switch for
your mode,
else you need to write your own,
best regards
Marcel