Hi, So, does it mean that to use rampart we need to have a header element even > though there is no information in the header? >
Yes, if Rampart is engaged and a security policy is attached to the service, Rampart engine expects a security header to be there in the SOAP Header which IMHO is quite reasonable. Regards, Nandana > > > Thanks, > Praveen. > > ----- Original Message ---- > From: Nandana Mihindukulasooriya <[EMAIL PROTECTED]> > To: axis-user@ws.apache.org > Sent: Monday, November 12, 2007 9:58:28 PM > Subject: Re: WS-Security Policy - Password in Clear Text > > Hi Praveen, > There are two ways to configure Rampart. > > 1.) Basic Rampart Configuration > Here you define how the messages are secured > using "InflowSecurity" and "OutflowSecurity" parameters in either > axis2.xml (client side) or in services.xml (server side). You can also > define these programmatically using InflowConfiguration and > OutflowConfiguration. In this configuration, we use <item></item> element to > define what to be done to secure the message (actions) and the > order that they need to be done. For example if you want to send only a > Username Token then the configuration below will work. Say if you want to > sign and encrypt the message then <items> element > will look like <items>Signature Encrypt</items>. If you want to change the > order of the actions such that you encrypt the message and then sign, all > you need to do is change the order of the elements > in items <items>Encrypt Signature </items>. > > eg. > <parameter name="OutflowSecurity"> > <action> > <items>UsernameToken</items> > <user>bob</user> > <passwordCallbackClass> > org.apache.rampart.samples.sample03.PWCBHandler</passwordCallbackClass> > <passwordType>PasswordText</passwordType> > </action> > </parameter> > > 2.) Policy based configuration > Here you define how the message is secured using > the ws - security policy language. ws - security policy language contains > set of assertions which allows you to tell how the message > is secured, what actions (sign/encrypt) to be carried out, order of them, > what supporting tokens must be sent with the message. There are three main > security binding assertions , Transport binding, Symmetric binding and > Asymmetric binding. You can use other assertions such as protection > assertions, token assertions and supporting token assertions to secure the > message according to your use > case. You can attach policies using services.xml or programatically. You > can attach policies to service (in Axis 2 ) policy subject, operation policy > subject or message policy subject. > > eg. > > <wsp:Policy wsu:Id="UserNameOverTransport" > xmlns:wsu=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd > " > xmlns:wsp=" http://schemas.xmlsoap.org/ws/2004/09/policy" > xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing " > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> > <wsp:ExactlyOne> > <wsp:All> > <sp:TransportBinding xmlns:sp=" > http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> > <wsp:Policy> > <sp:TransportToken> > <wsp:Policy> > <sp:HttpsToken > RequireClientCertificate="false" /> > </wsp:Policy> > </sp:TransportToken> > <sp:AlgorithmSuite> > <wsp:Policy> > <sp:Basic256 /> > </wsp:Policy> > </sp:AlgorithmSuite> > <sp:Layout> > <wsp:Policy> > <sp:Lax /> > </wsp:Policy> > </sp:Layout> > </wsp:Policy> > </sp:TransportBinding> > <sp:SignedSupportingTokens > xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy > "> > <wsp:Policy> > <sp:UsernameToken > sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient > "> > <wsp:Policy> > <sp:WssUsernameToken10 /> > </wsp:Policy> > </sp:UsernameToken> > </wsp:Policy> > </sp:SignedSupportingTokens> > </wsp:Policy> > > I tried your policy and it works fine for me. One thing I > noticed is that soap response doesn't contain a security header. This caused > a NullPointerException in Rampart sometime back but this is fixed. See the > jira [1] RAMPART-75. The response I got using the same policy is given > below. > > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/ > "> > <soapenv:Header> > <wsse:Security xmlns:wsse=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" > soapenv:mustUnderstand="1" /> > </soapenv:Header> > <soapenv:Body> > <PingResponse xmlns="http://InteropBaseAddress/interop > ">Ping</PingResponse> > </soapenv:Body> > </soapenv:Envelope> > > Do you know how the security is configured in the service. Can you post > the services.xml of the service if you have it. > > Regards, > Nandana > > > [1] - http://issues.apache.org/jira/browse/RAMPART-75 > > > > On Nov 12, 2007 10:46 PM, Praveen Palwai <[EMAIL PROTECTED]> wrote: > > > Hi, > > I am only sending the username and password while sending the request to > > the server. Do I need inflowsecurity even when I don't use encryption? Also > > there is no security information in the response from the server. The > > response is below: > > > > xmlns:soapenc=" > > http://schemas.xmlsoap.org/soap/encoding/" > > xmlns:xsd=" > > http://www.w3.org/2001/XMLSchema" > > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance > > "> > > <soapenv:Body> > > <getPasswordResponse xmlns=""> > > delmar08'> http://service.fcsservicesweb.nwa.com">delmar08 > > </getPasswordResponse> > > </soapenv:Body> > > </soapenv:Envelope> > > > > Thanks, > > Praveen Palwai. > > > > > > ----- Original Message ---- > > From: "[EMAIL PROTECTED] " <[EMAIL PROTECTED]> > > To: axis-user@ws.apache.org > > Sent: Sunday, November 12, 2000 10:49:42 AM > > Subject: Re: WS-Security Policy - Password in Clear Text > > > > your EPR is incorrect! > > > > in your axis2.xml you should have InflowSecurity defined ..here is an > > example > > > > <module ref="rampart"/> > > <parameter name="InflowSecurity"> > > <action> > > <items>Signature</items> > > <signaturePropFile>service.properties</signaturePropFile> > > </action> > > </parameter> > > where service.properties should contain these entries > > > > org.apache.ws.security.crypto.provider=SecurityProviderClass > > org.apache.ws.security.crypto.merlin.keystore.type=jks > > org.apache.ws.security.crypto.merlin.keystore.password=PutPassworkHere > > org.apache.ws.security.crypto.merlin.file=NameOfJKSFileCreatedByKeyTool > > > > I would start with the provider I would suggest BouncyCastle > > http://www.bouncycastle.org/ > > > > and work out from there > > > > M-- > > > > ----- Original Message ----- > > *From:* Praveen Palwai <[EMAIL PROTECTED]> > > *To:* axis-user@ws.apache.org > > *Sent:* Monday, November 12, 2007 11:07 AM > > *Subject:* Re: WS-Security Policy - Password in Clear Text > > > > Hi, > > I was able to resolve the digest password issue by adding the > > transportbinding tag to the policy.xml file. My current policy.xml file > > is > > <wsp:Policy wsu:Id="UTOverTransport" > > > > xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd > > " > > xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> > > <wsp:ExactlyOne> > > <wsp:All> > > <sp:TransportBinding > > xmlns:sp=" > > http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> > > <wsp:Policy> > > </wsp:Policy> > > </sp:TransportBinding> > > <sp:SignedSupportingTokens > > xmlns:sp=" > > http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> > > <wsp:Policy> > > <sp:UsernameToken /> > > </wsp:Policy> > > </sp:SignedSupportingTokens> > > </wsp:All> > > </wsp:ExactlyOne> > > </wsp:Policy> > > > > Using the above policy.xml file I am able to send the password in clear > > text and the server returns successfully but the client throws the below > > exception: > > Exception in thread "main" java.lang.NullPointerException > > at org.apache.rampart.RampartEngine.process(RampartEngine.java:90) > > at org.apache.rampart.handler.RampartReceiver.invoke( > > RampartReceiver.java:85) > > at org.apache.axis2.engine.Phase.invoke(Phase.java:292) > > at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212) > > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132) > > at > > org.apache.axis2.description.OutInAxisOperationClient.handleResponse( > > OutInAxisOperation.java:336) > > at org.apache.axis2.description.OutInAxisOperationClient.send( > > OutInAxisOperation.java:389) > > at org.apache.axis2.description.OutInAxisOperationClient.executeImpl > > (OutInAxisOperation.java:211) > > at org.apache.axis2.client.OperationClient.execute( > > OperationClient.java:163) > > at org.apache.axis2.client.ServiceClient.sendReceive( > > ServiceClient.java:528) > > at org.apache.axis2.client.ServiceClient.sendReceive( > > ServiceClient.java:508) > > at com.nwa.fcsservicesweb.service.FcsServiceClient.main( > > FcsServiceClient.java:81) > > > > The client code and the handler code is below. Can anyone tell me what > > am I doing wrong. > > public static void main(String[] args) throws Exception { > > ConfigurationContext ctx = ConfigurationContextFactory > > .createConfigurationContextFromFileSystem( > > "C:\\Java\\axis2-1.3\\repository", null); > > > > ServiceClient client = new ServiceClient(ctx, null); > > Options options = new Options(); > > options.setAction("\"\""); > > options.setTo(new EndpointReference("Endpoint")); > > > > RampartConfig rc = new RampartConfig(); > > rc.setUser("user"); > > rc.setPwCbClass("PWCBHandler"); > > Policy policy = loadPolicy("policy.xml"); > > policy.addAssertion(rc); > > > > options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, > > policy); > > client.setOptions(options); > > > > client.engageModule("addressing"); > > client.engageModule("rampart"); > > > > OMElement response = client.sendReceive > > (getPayload("0000101782")); > > > > System.out.println(response); > > } > > > > private static Policy loadPolicy(String xmlPath) throws Exception { > > StAXOMBuilder builder = new StAXOMBuilder(xmlPath); > > return PolicyEngine.getPolicy(builder.getDocumentElement()); > > } > > > > private static OMElement getPayload(String value) { > > OMFactory factory = OMAbstractFactory.getOMFactory(); > > OMNamespace ns = factory.createOMNamespace( > > "namespace", "ns1"); > > OMElement elem = factory.createOMElement("getPassword", null); > > OMElement childElem = factory.createOMElement("user", null); > > childElem.setText(value); > > elem.addChild(childElem); > > > > System.out.println(elem); > > return elem; > > } > > > > public class PWCBHandler implements CallbackHandler { > > > > public void handle(Callback[] callbacks) throws IOException, > > UnsupportedCallbackException { > > > > for (int i = 0; i < callbacks.length; i++) { > > WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i]; > > if(pwcb.getIdentifer().equals("user")){ > > pwcb.setPassword("password"); > > }else { > > throw new UnsupportedCallbackException(callbacks[i], > > "Invalid UserId"); > > } > > } > > } > > > > } > > > > > > ----- Original Message ---- > > From: Nandana Mihindukulasooriya <[EMAIL PROTECTED]> > > To: axis-user@ws.apache.org > > Sent: Sunday, November 11, 2007 9:57:24 PM > > Subject: Re: WS-Security Policy - Password in Clear Text > > > > Hi Praveen, > > > > Can you post the complete policy ? So we can see that whether your > > policy is configured to send the timestamp. > > > > Yes, Rampart used to sent password in digest by default and now it is > > fixed and now the Username tokens used > > as (signed)supporting tokens have the password in plaintext. Username > > Tokens are also encrypted as the password is > > in plain text as described in the web services security policy > > specification. Can you take a check out from latest > > Rampart trunk [1] and try this. > > > > Regards, > > Nandana > > > > [1] https://svn.apache.org/repos/asf/webservices/rampart/trunk/java > > > > > > On Nov 10, 2007 1:48 AM, Praveen Palwai <[EMAIL PROTECTED]> wrote: > > > > > Hi, I am using Axis2 1.3, rampart 1.3 to send username token to a Web > > > Service running on websphere. > > > I am using RampartConfig to set the user and the password callback > > > class. My question is using this configuration, the security header always > > > has nonce, timestamp included and the password is of type digest. What do > > > I > > > need to do so that the request doesn't contain nonce, timestamp and the > > > password is sent in clear text instead of digest. I have the following > > > policy.xml file > > > > > > <?xml version="1.0" encoding="UTF-8"?> > > > <wsp:ExactlyOne> > > > <wsp:All> > > > <wsp:Policy> > > > <sp:UsernameToken/> > > > </wsp:Policy> > > > </sp:SignedSupportingTokens> > > > </wsp:All> > > > </wsp:ExactlyOne> > > > </wsp:Policy> > > > > > > code snippet: > > > _serviceClient.engageModule("rampart"); > > > RampartConfig rc = new RampartConfig(); > > > rc.setUser("patadmin"); > > > rc.setPwCbClass("PWCBHandler"); > > > Policy policy = loadPolicy("policy.xml"); > > > policy.addAssertion(rc); > > > > > > _serviceClient.getOptions().setProperty( > > > RampartMessageData.KEY_RAMPART_POLICY, policy); > > > > > > Thanks, > > > Praveen Palwai. > > > > > > __________________________________________________ > > > Do You Yahoo!? > > > Tired of spam? Yahoo! Mail has the best spam protection around > > > http://mail.yahoo.com > > > > > > > > > > > __________________________________________________ > > Do You Yahoo!? > > Tired of spam? Yahoo! Mail has the best spam protection around > > http://mail.yahoo.com > > > > > > > > __________________________________________________ > > Do You Yahoo!? > > Tired of spam? Yahoo! Mail has the best spam protection around > > http://mail.yahoo.com > > > > > > ------------------------------ > Get easy, one-click access to your favorites. Make Yahoo! your > homepage.<http://us.rd.yahoo.com/evt=51443/*http://www.yahoo.com/r/hs> >