[ 
https://issues.apache.org/jira/browse/OPENEJB-333?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jean-Louis MONTEIRO closed OPENEJB-333.
---------------------------------------

       Resolution: Fixed
    Fix Version/s: 3.0

Works great since 3.0 and improved recently in 4.x and TomEE
                
> Authentication between an OpenEJB client and the OpenEJB EjbDaemon needs to 
> be implemented
> ------------------------------------------------------------------------------------------
>
>                 Key: OPENEJB-333
>                 URL: https://issues.apache.org/jira/browse/OPENEJB-333
>             Project: OpenEJB
>          Issue Type: Improvement
>    Affects Versions: 2.2
>            Reporter: John Sisson
>             Fix For: 3.0
>
>
> There seems to be a number of related issues in this area:
> 1. AuthRequestHandler.processRequest(..) method does not implement 
> authentication using credentials sent by client
> 2. A new TCP connection is opened and closed for the creation of the initial 
> context and each lookup on the context.  It seems that the context should 
> maintain a connection, where the connection can have an inactivity timeout 
> configured, that can be used by subsequent lookups??  If this was done, the 
> protocol version information would only have to be exchanged once.
> 3. Currently the authentication request is sent when the initial context is 
> created, but AFAIK, the subsequent JNDI requests (each over a new connection) 
> are not authenticated and therefore someone could easily write their own 
> malicious client that just sends the JNDI requests, bypassing the 
> authentication step.  If we are going to be using a number of connections, 
> then some authentication state needs to be passed on requests after the 
> authenticate request.
> 4. This issue probably should be moved to a separate JIRA... 
> AuthenticationRequest message containing the principal (e.g. system) and 
> credentials (e.g. manager) is in the clear (not encrypted).  
> Notes...
> When an end user application using the OpenEJB client creates an 
> InitialContext, the following takes place:
> * OpenEJB client starts a connection to the OpenEJB daemon (server)
> * OpenEJB client sends a version string (ProtocolMetaData) to the server for 
> the OpenEJB Enterprise Javabean Protocol (OEJP), e.g. OEJP/2.0
> * The server responds with its ProtocolMetaData string
> * The OpenEJB client sends AUTH_REQUEST (value 02) as a one byte message to 
> the server
> * The OpenEJB client sends an AuthenticationRequest message  containing the 
> principal (e.g. system) and credentials (e.g. manager)
> * The EjbDaemon (server) reads the request type so it can pass the request to 
> the appropriate handler class.
> * The EjbDaemon (server) passes the AUTH_REQUEST message to the 
> AuthRequestHandler.processRequest(..) method that does contains a TODO to 
> implement some real authentication.  Currently it does not use the 
> credentials and always returns a response code of AUTH_GRANTED
> * The OpenEJB client receives the AUTH_GRANTED response and closes the 
> connection.
> * The end user application is returned an InitialContext
> When an end user application using the OpenEJB client performs a lookup on 
> the context they just created, the following takes place:
> * OpenEJB client starts a connection again to the OpenEJB daemon (server)
> * OpenEJB client sends a version string again (ProtocolMetaData) to the 
> server for the OpenEJB Enterprise Javabean Protocol (OEJP), e.g. OEJP/2.0
> * The server responds again with its ProtocolMetaData string
> * The OpenEJB client sends JNDI_REQUEST (value 01) as a one byte message to 
> the server
> * The OpenEJB client sends a JNDIRequest message containing the requestMethod 
> JNDI_LOOKUP (value 27), a clientModuleId of null and a request string of 
> /EchoTest
> * The EjbDaemon (server) reads the request type so it can pass the request to 
> the appropriate handler class.
> * The EjbDaemon (server) passes the JNDIRequest message to the 
> JndiRequestHandler.processRequest(..) method 
> * If the JndiRequestHandler finds the name it returns a JNDI_EJBHOME response 
> code and writes a serialized EJBMetaDataImpl object to the client (containing 
> home class, remoteclass, keyclass, ejbHomeProxy, type, deploymentID, 
> deploymentCode)
> * The OpenEJB client's JNDIResponse class deserializes the EJBMetaDataImpl 
> object.
> * The end user application is returned the Object
> Example code used for above requests: (see GERONIMO-1062 attachments for full 
> source of example app)
>     Properties props = new Properties();
>     props.put("java.naming.factory.initial",
>                 "org.openejb.client.RemoteInitialContextFactory");
>     props.put("java.naming.provider.url", "127.0.0.1:4201");
>     props.put("java.naming.security.principal", "system");
>     props.put("java.naming.security.credentials", "manager");
>     Context ctx = new InitialContext(props); 
>     EchoTestHome ejbHome = (EchoTestHome) ctx.lookup("EchoTest");

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to