[ http://issues.apache.org/jira/browse/JS2-188?page=comments#action_59586 ]
     
mike long commented on JS2-188:
-------------------------------

Sorry if this is a duplicate. I hit the tab and enter key by mistake before I 
had completed this paper.


This morning I need to wrap up the LDAP authentication and authorization. So I 
will attach my latest work and take a couple paragraphs to document where my 
implementation is incomplete.  I will send a tar file of my latest version to 
David if I cannot attach it to this JIRA.

First of all I want to thank Dolf for his comments. The original version of the 
LDAP authentication code I checked in did a bind. In my zeal to refactor my 
code I unwisely decided to use the same technique to get the password that I 
used to get other fields from the LDAP objects.

I spent a couple days last week working on the LDAP authorization piece. 
Following is a schema I devised for authorization.  Note the way I mapped the 
many-to-many relationships as nulti-valued fields. Also note that the field 
called "uid". This field is meant to serve as a unique identifier.  Note how I 
have used separate LDAP clases to represent the User, Group, and Role 
principals instead of mapping them to a single LDAP abstraction like in the 
current J2 data model.

attributetype ( 1.3.6.1.4.1.8100.1.2.3.1 NAME 'j2-classname'
        DESC 'The java class name of the object.'
        EQUALITY caseIgnoreIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
        SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.8100.1.2.3.2 NAME 'j2-action'
        DESC 'An action associated with a permission. This is a multi-valued 
attribute.'
        EQUALITY caseIgnoreIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
attributetype ( 1.3.6.1.4.1.8100.1.2.3.3 NAME 'j2-role'
        DESC 'The UID of an associated Role. This is a multi-valued attribute.'
        EQUALITY caseExactIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
attributetype ( 1.3.6.1.4.1.8100.1.2.3.4 NAME 'j2-group'
        DESC 'The UID of an associated Group. This is a multi-valued attribute.'
        EQUALITY caseExactIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
attributetype ( 1.3.6.1.4.1.8100.1.2.3.5 NAME 'j2-permission'
        DESC 'The UID of an associated Permission'
        EQUALITY caseExactIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
attributetype ( 1.3.6.1.4.1.8100.1.2.3.6 NAME 'creation-date'
        DESC 'create date'
        EQUALITY caseIgnoreIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
        SINGLE-VALUE )
attributetype ( 1.3.6.1.4.1.8100.1.2.3.7 NAME 'modified-date'
        DESC 'modified date'
        EQUALITY caseIgnoreIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
        SINGLE-VALUE )

objectclass ( 1.3.6.1.4.1.8100.1.2.4.1 NAME 'jetspeed-2-group'
DESC 'Jetspeed-2 group'
MUST ( j2-classname $
uid)
MAY ( j2-role $
              creation-date $
modified-date) )
objectclass ( 1.3.6.1.4.1.8100.1.2.4.2 NAME 'jetspeed-2-permission'
DESC 'Jetspeed-2 permission'
MUST ( j2-classname $
uid)
MAY ( j2-action $
creation-date $
modified-date) )
objectclass ( 1.3.6.1.4.1.8100.1.2.4.3 NAME 'jetspeed-2-role'
DESC 'Jetspeed-2 role'
MUST ( j2-classname $
uid)
MAY ( creation-date $
modified-date) )
objectclass ( 1.3.6.1.4.1.8100.1.2.4.4 NAME 'jetspeed-2-user'
DESC 'Jetspeed-2 user'
SUP inetOrgPerson
MUST ( cn $
uid)
MAY ( j2-role $
j2-group $
j2-permission $
creation-date $
modified-date))


Please note the following inadequacies in this schema and in my code:
1) I have arbitrarily used the 1.3.6.1.4.1.8100 name for the attributes and 
object classes. If you are going to use this schema please get "official" LDAP 
names by going through the proper LDAP channels.
2) I probably could have found existing object classes that mapped users to 
roles and groups but did not have time.
3) As Dolf noted, I am not doing a "bind" for authentication.
4) I have hard-wired everything about the connection to LDAP, including the 
URL, fields, and object class names. This is inadequate. Any LDAP schema that 
supports the kind of relationships we need should be mappable to the code.
5) I have not completely implemented authorization. I will document what I have 
and have not done.
   a) I have implemented the UserSecurityHandler, CredentialHandler, 
GroupSecuirityHandler, and SecurityMappingHandler interfaces. I have not 
implemented the permissions table/interfaces in LDAP.  
   b) I have not implemented the RoleSecurityHandler and the methods that deal 
with the relationships between users and roles on the SecurityMappingHandler 
implementation. However, the relationships and code are analogs to the 
user-group relationship.
   c) All my unit tests run. However, not all the Jetspeed-2 unit tests run. I 
got hung up Friday on the meaning of full-path name for groups and roles.  
David will have to resolve what I should do there. I hope my intent is clear 
enough.
   d) The authentication tests that have to do with password expiration and the 
reuse of passwords fail because I never implemented this feature in my LDAP 
authentication code.
   e) I implemented a goofy workaround to a problem I had where I could not 
store names containing slashes in an LDAP object class. I substitited an 
ampersand. This is wrong and needs to be changes to use an LDAP composite name 
or some other "official" technique. I simply ran out of time.
   f) My code that gets the password field needs to do proper unicode 
conversion. Perhaps that won't matter once authentication does an LDAP bind 
instead of a simple lookup.
   g) My implementation uses OpenLDAP. 
   h) My code that does LDAP queries is pretty mature. 
   i) I have not had time to fully understand the relationship of the 
authorization data model and interfaces to the preferences data model. I have 
made no attempt to implement that functionality in this work. My hope was that 
the current RDBMS Preferences implementation will work with LDAP 
authorization/authentication.
   j) I have not had time to fully understand the relationship of the 
authorization data model and interfaces for single sign on. I have made no 
attempt to implement that functionality in this work. My hope was that the 
current RDBMS SSO implementation will work with LDAP 
authorization/authentication.


In general this experience has been really fun for me. I hope you will forgive 
my mistakes. I was new to LDAP, Jetspeed-2, JAAS, and Spring until 6 weeks ago. 
 I will be happy to participate in this work as it matures.

Gratefully,
Mike




> Implement the LDAP
> ------------------
>
>          Key: JS2-188
>          URL: http://issues.apache.org/jira/browse/JS2-188
>      Project: Jetspeed 2
>         Type: Improvement
>   Components: Security
>     Reporter: J, Edgar Zavala
>  Attachments: jetspeed-2-ldap-authentication.tar.gz
>
> Implement the LDAP integration using the SPI, provide the LDAP authenitcation 
> option.
> TODO:
> 1.- Complete the current implementation and complete the David work in:
>    a) org.apache.jetspeed.security.spi.impl.LdapCredentialHandler
>    b) org.apache.jetspeed.security.spi.impl.LdapUserSecurityHandler

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to