This issue has been largely resolved by WS-Trust, at least for SOAP-based web services. WS-Trust is a well-defined protocol for verifying and exchanging "authentication tokens" and can be used in scenarios between enterprises with protocols such as WS-Federation that are built on it.
One example scenario is for clients to request a token from the WS-Trust server, then include that token in the SOAP header of the web service host. The flip side should include something simple, such as <UsernameToken> in the host request, and have delegate authentication on the WS-Trust server side.
Good WS-Trust client support - WCF has support out of the box, and different vendors have J2EE interceptors for the JAX-RPC and JAX-WS web services.
While WS-Trust focuses on authentication, you can do coarse-grained authentication using the logic about when to issue or confirm a received token. Do not give out / check the token, and access is actually denied. Fine-grained authorization for web services typically requires some user-specific interceptors, which are vendor-specific.
I work for IBM Tivoli Security and we have several products in this space. The first is Tivoli Federated Identity Manager (TFIM). One colleague and I wrote this article about integrating TFIM with WSE-based web services and include an overview of the WS-Trust protocol itself. The second product is Tivoli Security Policy Manager (TSPM), which implements fine-grained authorization for web services.
There are open source versions of the same protocols, which is the advantage of using a standard solution. I believe that JBoss and WSO have options that may be useful.
craigforster
source share