Michael, i believe Axis can plug into "container security configuration"....there are some flags to switch on i think (http://livedocs.macromedia.com/jrun/4/Programmers_Guide/wssecurity2.htm)
-- dims On Tue, 26 Oct 2004 14:03:40 -0700, Michael Merz <[EMAIL PROTECTED]> wrote: > Hi Wolfgang, > > Thanks much for the great work on this! We should talk to the Axis guys > about what their plans regarding security are -- Dims, Ias? Are you guys > planning on implementing a role-based security model in Axis -- that > e.g. pipes the container security configuration (user, roles) through to > the WebService? > > I haven't tried out your code, yet -- just looked at it. I like the fact > that it's pretty much separate from the rest of the WSM implementation, > integrated only through the XML (config) file. I'll give it a spin soon. > This way, it can easily be customized and integrated when needed. > > It's awesome to have support for security extensions in WS running on > Tomcat/Axis! :) Since the security annotations are also particularly > interesting (since mandatory) for the JSR-109-type deployment scenario, > we should try to make as few assumptions about the runtime as possible. > Maybe we can come up with an abstraction layer once we gathered some > experience with the whole security model. The Axis model could implement > such an abstract interface. Comments, ideas anyone? > > Cheers, > > -michael > > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > Sent: Monday, October 25, 2004 10:14 AM > To: [email protected] > Cc: Michael Merz; Jonathan Colwell > Subject: @SecurityIdentity, @SecurityRoles > > Hi Michael and Jonathan, > > I've not forgot about @SecurityRoles stuff, but been think how > to integrate @SecurityXXX annotation with Tomcat/Axis's security > model. > > The section "Authenticating the caller" of Axis's Web Service > Security page ( http://ws.apache.org/axis/java/security.html ) > states "Note that Axis does not yet integrate with the servlet > API authentication stuff." > > I think the integration will never be implemented unless the > securiy model of servlet spec is changed. > > All authentication/authorization stuff of servlet container is > done in the container itself. > There's no way for servlets to get involved in the > authentication/authorization process of the servlet container. > > Exactly same thing happens to Axis since Axis is just a servlet > so that it's impossible for Axis to be integrated with the servlet > API authentication. > Thus, Axis has its own security mechanism using users.lst and > perm.lst. > As long as I investigated, the security model of Axis is > user-based. > The users.lst holds username/password combinations. > The perms.lst holds username/action( which is allowed to be > invoked by the username) > > We have two choices to build the security model. > One is just to use Axis's users.lst. (user-based) > The other is to make our(Beehive) own role-based security model. > (probably we can make a file like tomcat-users.xml and read > username/password and roles out of the file.) > > The advantage of the former one is that the current Axis users > can reuse thier users.lst file. > The disadvantage is that it's user-based authorization and > always sticks with Axis. > > The advantage of the latter one is that role-based authorization > and can be used with a web service container other than Axis. > The disadvantage is that it required for admin to maintain two > username list files. ( Axis's one and Beehive's one ) It's kinda > troublesome for developers and admins. > > I've implemented with the former one. (Attached on this email) > The file, WsmAuthenticationHandler.java, resides in > the wsm/src/runtime/org/apache/beehive/wsm/axis/handlers directory. > ( Please create a "handlers" directory under the "axis" directory ) > > To enable the security, please follow the procedures below. > > 1. Adding <handler > type="java:org.apache.beehive.wsm.axis.handlers.WsmAuthenticationHandler > "/> > element between <handler > type="java:org.apache.beehive.wsm.axis.DropInDeploymentHandler"> > element and <handler type="java:org.apache.axis.handlers.JWSHandler"> > element > in the server-config.wsdd. ( I think the order is not that important > though. ) > > 2. Creating a users.lst file in AnnotatedAxis/WEB-INF directory. > File can be like this. ( Don't need hyphens ) > --------------- > wolfgang mypass > michael yourpass > --------------- > > 3. Modifying AddressBookWebService.jws like below. > > @WebService( targetNamespace="http://www.beehive.com/AddressBook") > @SecurityRoles(rolesAllowed={"wolfgang"}) > public class AddressBookWebService implements AddressBook { > ..... > @WebMethod > @SecurityRoles(rolesAllowed={"michael"}) > public void addEntry(String name, Address address) throws > RemoteException { > addressBook.addEntry(name, address); > } > ..... > @WebMethod > public Address getAddressFromName(String name) throws RemoteException { > return addressBook.getAddressFromName(name); > } > > 4. In client side, use the wsdl2java tool to generate java files. > > This is snippet of my client code. > > binding = > (com.beehive.www.AddressBook.AddressBookWebServiceSoapBindingStub) > new > com.beehive.www.AddressBook.AddressBookWebServiceServiceLocator().getAdd > ressBookWebService(); > binding.setUsername("wolfgang"); > binding.setPassword("mypass"); > binding.addEntry("Nick",new Address()); > > The user "wolfgang" can invoke all methods. > The user "michael" can invoke ony addEntry method. > The getAddressFromName method is allowed to be invoked by only user > "wolfgang". > ( This is because even though the getAddressFromName method is not > annotated with > @SecurityRoles, the CLASS is annotated with @SecurityRoles( > rolesAllowed={"wolfgang"}) ) > > If user "michael" trys to invoke the getAddressFromName method, > (401)Unauthorized > exception will be thrown. > > @SecurityRoles.rolesReferenced and @SecurityIdentity are not implemented > yet. > How can we use these annotations with web service ? > @SecurityRoles.rolesReferenced can be used with servlets if role is > hardcoded like > below in the source of servlet and allow admin/deployer to change role > to access > the servlet. > > doGet(HttpServletRequest req, HttpServletResponse res )...{ > if( req.isUserInRole("myrole") ){ > ... > }else{ > ... > } > } > > But it's impossible for web serivce to do like that because web service > don't get > an interface object such as req object above from web service container. > > Can I think about @SecurityIdentity later or when we integrate Beehive > with EJB ? > > Thanks in advance. > > wolfgang > ps) > To Michael, please don't check in the attachment. I gotta put comments > and might > need some modification. > Although I said we have two ways for implementing security models above, > I can > implement both and let developers/deployers choose one out of two. > > -- Davanum Srinivas - http://webservices.apache.org/~dims/
