You might be better off looking into OpenID and/or aMember (I know little of either one, but they are essentially solutions for what you describe).
The nice thing about LDAP is that it’s (supposed to be) technology-agnostic. You can query directory data that is organized in a manner that makes searching based on relationship much faster than a standard row-based table.
This isn’t always the case; as I mentioned, Active Directory and Novell’s eDirectory are not quite the same. Happens to be that VBA connects naturally to AD (big surprise), yet eDirectory querying seems to be impossible in VBA, as eDirectory does not map organizational units (OU) in a way that makes querying possible using VBA. If there’s a way around this, we (our LDAP guy and myself) were not able to find it. VBA LDAP errors are laughably bad, as well, so we were left guessing that was the issue.
I instead bring data from a POST call to a protected page on our website which outputs XML containing standard user data, which is then read by the VBA application on request (using XMLHttpRequest, the same ActiveX control that inspired Ajax).
It does no overwriting, though; it just fills in holes in identities (which can then be saved) and provides instance data, like if the person is still employed at the university or not. Our AD setup was still in flux at the time (we’re moving away from Netware), so this was the best and fastest solution. It was hard-won, let me tell you.
But, Active Directory is not supposedly technically LDAP either. They’ve made some changes to the functionality that make certain objectives easier for network administrators using Windows networking, that apparently make it difficult in other areas of programming that don’t need this functionality. This is the old “Microsoft does it their way, not the ‘standard’ way” thing. Some claim AD is not actually LDAP. I think it’s irrelevant.
In the end, LDAP on the backend is actually just a table with rows and columns. The way the data is stored is similar I think to things like Google’s Big Table, where it’s column-based instead of row-based. This is where the speed comes from, I imagine, although our LDAP queries (at my university) are actually somewhat time-intensive (in relative terms). Lots of queries to support, I imagine.
The results look pretty much like SQL results, so it’s not like there’s any magic there. Which leads me to the next question: Do you need LDAP at all?
We have two main eDirectory databases, one for authentication and one for identity. Originally, all there was was IDTREE, though; eventually authentications became too intensive for the IDTREE installation and they pushed that purpose to another mirrored directory with less data included.
But the reason for implementing LDAP was that our university needed a way to push data to a centrally administered (and by extension, limited) database to keep from allowing pulls from sensitive systems; it wasn’t so much to coordinate logins and profiles in the beginning, in other words. It was put together to prevent people from requesting direct access to the separate sensitive systems (like EIS and the class scheduling system), and oh by the way, why not synchronize passwords here too? Wonderful!
The reason I say this is that LDAP is not an identity cure-all. It makes certain things easier, but can be easily “misused” or misunderstood. Additionally, it can add complexity to some things which seem straight forward, such as:
1. Do you want password synchronization, or single sign-on functionality?
2. Are profiles copied (synchronized), or bridged (single profile instanced through reference) in all applications?
- 2a. If synchronized, do you allow for quarter hourly profiling?
- 2b. What about forced synchronization to prevent users waiting?
- 2c. If single profile, what to do with apps which are heavy on dispersed SQL statements which would need heavy rewriting?
- 2d. What about performance hits on bridging?
- 2e. If a program (like EE) allows for profile editing (“Let me change my name”), how will that work out?
- 2f. If it’s pulled from a central data repository, how do you distribute data that has been changed?
- 2g. How do you keep new profile data from being overwritten by old?
3. How do force all apps to behave in the same manner re: profile information?
Authoring an LDAP class is as simple as building a connection/binding/query service. It’s not hard; I’ve done it already (although I need to rewrite it). It’s not much different from relational databases in that respect, maybe a bit more limited in what it can do.
In the end, I think it’s that you need to engineer a solution that answers these questions, then see if LDAP is the best logical solution. Also, you might look into VMWare appliances, many of which come prebuilt with OpenLDAP and the synchronization has been managed. I have no idea if EE is supported by any, though. If you step into a solution that is managed, though, I think the writing will be on the wall already, which will make setting up EE more straight forward.