[jboss-user] [JBossWS] - WS Security - Identity propagation between web services.

ravikb_jboss do-not-reply at jboss.com
Tue Apr 14 01:21:55 EDT 2009


Hi,

I have  two WebServices with EJB Endpoints. (EJBWS1 and WJBWS2). Both are secure web services and the methods in those web services has restricted access by specifying the roles using &RolesAllowed annotation.

For example:

@RolesAllowed("Role1")
public String method1(){}

EJBWS1 is configured to receive the user credentials using WS-Security - User name token (using @EndpointConfig) and EJB2WS is configured to receive credentials using Basic authentication.

Both EJB's are in the same security Domain and also in the same JAR file.

I wrote a client to pass WS-Security credentials to EJBWS1 and it works. In EJBWS1, I called a method in EJBWS2 using EJB way (got a EJB object reference and invoke operation). Identity get propagated and the method call in EJBWS2 gets invoked.

But when i invoke the same using webservice way, i.e in EJBWS1 method, i get a webserviceref (static proxy) for EJJBWS2, get port and invoke operation, i am getting unauthorized error. Identity is not getting propagated from Webservice1 to web service 2

does identity propagation concept not exist in webservice invocations? or am i making any mistake here?

Appreciate your help.

I have included the code in the note:
Thanks in advance
Ravi.


NOTE:
My code for invoking webservice is as follows:
1) Invoking EJBWS 2:

       @WebServiceRef
   static TestBean1WSClient service3;
public void insert(Agent object) {
....

 TestBean1Local tblocal = service3.getEndpointPort();
  tblocal.insert(object);
}
2) 

Created a WebService client using @WebServiceClient annotation:
@WebServiceClient(name = "TestBean1Service", targetNamespace = "http://service.ri.com/", wsdlLocation = "META-INF/wsdl/TestBean1Bean.wsdl")
public class TestBean1WSClient extends Service
{

    private final static URL WSDL_LOCATION;
    private final static QName TESTENDPOINTSERVICE = new QName("http://service.ri.com/", "TestBean1Service");
    private final static QName TESTENDPOINTPORT = new QName("http://service.ri.com/", "TestBean1BeanPort");

    static {
        System.out.println("TestBean1WSClient static block");
        URL url = null;
        try {
                  URL baseUrl = com.hex.ffm.ri.service.TestBean1Local.class.getResource(".");
                  System.out.println(" baseURL "+baseUrl);
            url = new URL("http://127.0.0.1:7000/Practice/TestBean1Bean?wsdl");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        WSDL_LOCATION = url;
    }

   public TestBean1WSClient(URL wsdlLocation, QName serviceName) {
      
        super(wsdlLocation, serviceName);
    
    }

    public TestBean1WSClient() {
        super(WSDL_LOCATION, TESTENDPOINTSERVICE);

    }

    
    @WebEndpoint(name = "TestBean1BeanPort")
    public TestBean1Local getEndpointPort() {
        return (TestBean1Local)super.getPort(TESTENDPOINTPORT, TestBean1Local.class);
    }

}



View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4225232#4225232

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4225232



More information about the jboss-user mailing list