1 Reply Latest reply on Jan 15, 2013 5:19 AM by Bruno Mateus

    Jboss Negotiation 2.1.1 and EJB3 Authentication

    Bruno Mateus Newbie

      Hi all,

       

      I have the following setup:

      • JBoss Negotiation 2.1.1
      • AD on Windows Server 2003
      • JBoss 4.2.3 on Windows Server 2008 R2
      • Client IE8 on Windows 7

       

      My main goal is to have SSO on my app (after a user is authenticated on the domain no username/password is required to access my app)

       

      I'm able to execute the Negotation Toolkit app successfully (all the three tests). I also successfully configured JBoss Negotiation on my app and I can access it transparently.

       

      My problem is related with EJB3 authentication. My EJBs have the following

       

       

      {code}

      @SecurityDomain("CORECOMPETENCE")

      (...)

      @RolesAllowed({"admin", "private"})

      {code}

       

      I have the following error

       

       

       

      {code}

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] TRACE org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - Security domain: CORECOMPETENCE

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] DEBUG org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - removeRealmFromPrincipal=true

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] DEBUG org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - serverSecurityDomain=host

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] DEBUG org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - usernamePasswordDomain=null

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] TRACE org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - login

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] TRACE org.jboss.security.negotiation.spnego.SPNEGOLoginModule  - abort

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] TRACE org.jboss.security.plugins.JaasSecurityManager.CORECOMPETENCE  - Login failure

      javax.security.auth.login.LoginException: No NegotiationContext and no usernamePasswordDomain defined.

                at org.jboss.security.negotiation.spnego.SPNEGOLoginModule.innerLogin(SPNEGOLoginModule.java:188)

                at org.jboss.security.negotiation.spnego.SPNEGOLoginModule.login(SPNEGOLoginModule.java:138)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)

                at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)

                at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)

                at java.security.AccessController.doPrivileged(Native Method)

                at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)

                at javax.security.auth.login.LoginContext.login(LoginContext.java:579)

                at org.jboss.security.plugins.JaasSecurityManager.defaultLogin(JaasSecurityManager.java:603)

                at org.jboss.security.plugins.JaasSecurityManager.authenticate(JaasSecurityManager.java:537)

                at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:344)

                at org.jboss.aspects.security.AuthenticationInterceptor.authenticate(AuthenticationInterceptor.java:123)

                at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:66)

                at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)

                at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)

                at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)

                at $Proxy373.findAllForListing(Unknown Source)

                at com.criticalsoftware.corecompetence.stripes.action.appraisal.AppraisalActionBean.appraisal(AppraisalActionBean.java:104)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

       

      (...)

       

       

      2013-01-14 18:30:52,339 [http-0.0.0.0-8080-1] ERROR com.criticalsoftware.webcore.stripes.exceptions.DefaultExceptionHandler  - Authentication failure

      javax.ejb.EJBAccessException: Authentication failure

                at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.handleGeneralSecurityException(Ejb3AuthenticationInterceptor.java:68)

                at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:70)

                at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)

                at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)

                at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)

                at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)

                at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)

                at $Proxy373.findAllForListing(Unknown Source)

                at com.criticalsoftware.corecompetence.stripes.action.appraisal.AppraisalActionBean.appraisal(AppraisalActionBean.java:104)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:445)

                at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:157)

                at net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:107)

                at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:154)

                at net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:73)

                at net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:443)

                at net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:241)

                at net.sourceforge.stripes.controller.DispatcherServlet.doPost(DispatcherServlet.java:154)

                at net.sourceforge.stripes.controller.DispatcherServlet.doGet(DispatcherServlet.java:61)

                at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)

                at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

                at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

       

      {code}

       

       

      I downloaded the code and using breakpoints I detected that when I execute the EJBs, the NegotiationAuthenticator is executed and the authenticator method authenticate returns true. After this the SPNEGOLoginModule is executed and the login method returns false, because no negotiation context is available (SPNEGOLoginModule.java innerLogin method).

       

       

      *Why is the login module executed if the authenticator method returns true?*

       

      I tried to follow the instructions on https://community.jboss.org/wiki/EJB3AuthenticationWithSPNEGO with no success.

       

       

      *Does anyone was able to setup EJB3 authentication on JBoss 4.2.x?*

       

      If required I can post my configuration.

       

      Thanks.