You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by lm...@apache.org on 2010/06/17 10:50:11 UTC

svn commit: r955511 - in /cxf/sandbox/oauth_1.0a/rt/rs/oauth/src: main/java/org/apache/cxf/auth/oauth/endpoints/ main/java/org/apache/cxf/auth/oauth/provider/ main/java/org/apache/cxf/auth/oauth/utils/ test/java/org/apache/cxf/auth/oauth/endpoints/ tes...

Author: lmoren
Date: Thu Jun 17 08:50:11 2010
New Revision: 955511

URL: http://svn.apache.org/viewvc?rev=955511&view=rev
Log:
Temporary Credentail Request improvements and unit tests added

Modified:
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialService.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceImpl.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/utils/OAuthUtils.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceTest.java
    cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/resources/oauth-beans.xml

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialService.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialService.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialService.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialService.java Thu Jun 17 08:50:11 2010
@@ -18,15 +18,16 @@
  */
 package org.apache.cxf.auth.oauth.endpoints;
 
+import org.springframework.stereotype.Service;
+
 import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 
-import org.springframework.stereotype.Service;
-
 /**
  * @author Lukasz Moren
  */
@@ -35,5 +36,6 @@ import org.springframework.stereotype.Se
 public interface TemporaryCredentialService {
     @POST
     @Produces("application/x-www-form-urlencoded")
-    Response getRequestService(@Context HttpServletRequest request);
+    @Consumes("application/x-www-form-urlencoded")
+    Response getTemporaryCredentials(@Context HttpServletRequest request);
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceImpl.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceImpl.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceImpl.java Thu Jun 17 08:50:11 2010
@@ -19,34 +19,29 @@
 
 package org.apache.cxf.auth.oauth.endpoints;
 
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-
-import net.oauth.OAuth;
-import net.oauth.OAuthAccessor;
-import net.oauth.OAuthConsumer;
-import net.oauth.OAuthException;
-import net.oauth.OAuthMessage;
-import net.oauth.OAuthProblemException;
-import net.oauth.SimpleOAuthValidator;
+import net.oauth.*;
 import net.oauth.server.OAuthServlet;
-import org.apache.cxf.auth.oauth.provider.*;
+import org.apache.cxf.auth.oauth.provider.ClientAuthenticationInfo;
 import org.apache.cxf.auth.oauth.provider.OAuthDataProvider;
 import org.apache.cxf.auth.oauth.provider.OAuthToken;
-
 import org.apache.cxf.auth.oauth.validation.OAuthValidatorWrapper;
 import org.apache.cxf.auth.oauth.validation.OAuthValidatorWrapperImpl;
 import org.apache.cxf.common.logging.LogUtils;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
 /**
  * @author Lukasz Moren
  */
@@ -65,31 +60,32 @@ public class TemporaryCredentialServiceI
 
     @POST
     @Produces("application/x-www-form-urlencoded")
-    public Response getRequestService(@Context HttpServletRequest request) {
+    @Consumes("application/x-www-form-urlencoded")
+    public Response getTemporaryCredentials(@Context HttpServletRequest request) {
         //todo add realm optional parameter
+        //todo check if entity-body single part?
         LOG.log(Level.INFO, "temporary credentails endpoint invoked");
         try {
             OAuthMessage oAuthMessage = OAuthServlet.getMessage(request, request.getRequestURL().toString());
 
             oAuthMessage.requireParameters(OAuth.OAUTH_CONSUMER_KEY,
-                    OAuth.OAUTH_SIGNATURE_METHOD,
-                    OAuth.OAUTH_SIGNATURE,
-                    OAuth.OAUTH_TIMESTAMP,
-                    OAuth.OAUTH_NONCE,
-                    OAuth.OAUTH_CALLBACK);
+                OAuth.OAUTH_SIGNATURE_METHOD,
+                OAuth.OAUTH_SIGNATURE,
+                OAuth.OAUTH_TIMESTAMP,
+                OAuth.OAUTH_NONCE,
+                OAuth.OAUTH_CALLBACK);
 
 
             ClientAuthenticationInfo authenticationInfo = oAuthDataProvider
-                    .getClientAuthenticationInfo(oAuthMessage.getParameter(OAuth.OAUTH_CONSUMER_KEY));
+                .getClientAuthenticationInfo(oAuthMessage.getParameter(OAuth.OAUTH_CONSUMER_KEY));
 
             //user credentials not found
             if (authenticationInfo == null) {
                 return Response.status(HttpServletResponse.SC_UNAUTHORIZED).build();
             }
 
-            //todo add validation and signature checking
             OAuthConsumer consumer = new OAuthConsumer(oAuthMessage.getParameter(OAuth.OAUTH_CALLBACK),
-                    authenticationInfo.getConsumerKey(), authenticationInfo.getSecretKey(), null);
+                authenticationInfo.getConsumerKey(), authenticationInfo.getSecretKey(), null);
 
             OAuthAccessor accessor = new OAuthAccessor(consumer);
 
@@ -98,8 +94,9 @@ public class TemporaryCredentialServiceI
 
 
             OAuthToken oAuthToken = oAuthDataProvider
-                    .generateOAuthToken(authenticationInfo.getConsumerKey());
+                .generateOAuthToken(authenticationInfo);
 
+            //create response
             Map<String, Object> responseParams = new HashMap<String, Object>();
             responseParams.put(OAuth.OAUTH_TOKEN, oAuthToken.getOauthToken());
             responseParams.put(OAuth.OAUTH_TOKEN_SECRET, oAuthToken.getTokenSecret());

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfo.java Thu Jun 17 08:50:11 2010
@@ -25,4 +25,6 @@ public interface ClientAuthenticationInf
     String getConsumerKey();
 
     String getSecretKey();
+
+    String getCallbackURL();
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/ClientAuthenticationInfoImpl.java Thu Jun 17 08:50:11 2010
@@ -24,10 +24,16 @@ package org.apache.cxf.auth.oauth.provid
 public class ClientAuthenticationInfoImpl implements ClientAuthenticationInfo {
     private String consumerKey;
     private String secretKey;
+    private String callbackURL;
 
-    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey) {
+    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey, String callbackURL) {
         this.consumerKey = consumerKey;
         this.secretKey = secretKey;
+        this.callbackURL = callbackURL;
+    }
+
+    public ClientAuthenticationInfoImpl(String consumerKey, String secretKey) {
+        this(consumerKey, secretKey, null);
     }
 
     public String getConsumerKey() {
@@ -37,4 +43,40 @@ public class ClientAuthenticationInfoImp
     public String getSecretKey() {
         return secretKey;
     }
+
+    public String getCallbackURL() {
+        return callbackURL;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+
+        ClientAuthenticationInfoImpl that = (ClientAuthenticationInfoImpl)o;
+
+        if (callbackURL != null ? !callbackURL.equals(that.callbackURL) : that.callbackURL != null) {
+            return false;
+        }
+        if (!consumerKey.equals(that.consumerKey)) {
+            return false;
+        }
+        if (!secretKey.equals(that.secretKey)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = consumerKey.hashCode();
+        result = 31 * result + secretKey.hashCode();
+        result = 31 * result + (callbackURL != null ? callbackURL.hashCode() : 0);
+        return result;
+    }
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProvider.java Thu Jun 17 08:50:11 2010
@@ -25,5 +25,5 @@ package org.apache.cxf.auth.oauth.provid
 public interface OAuthDataProvider {
     ClientAuthenticationInfo getClientAuthenticationInfo(String consumerKey);
 
-    OAuthToken generateOAuthToken(String consumerKey);
+    OAuthToken generateOAuthToken(ClientAuthenticationInfo authInfo);
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/provider/OAuthDataProviderImpl.java Thu Jun 17 08:50:11 2010
@@ -22,8 +22,8 @@ package org.apache.cxf.auth.oauth.provid
 import org.apache.cxf.auth.oauth.utils.OAuthUtils;
 import org.springframework.stereotype.Service;
 
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
@@ -33,20 +33,21 @@ import java.util.Map;
 public class OAuthDataProviderImpl implements OAuthDataProvider {
 
     private Map<String, ClientAuthenticationInfo> clientAuthInfo
-            = new ConcurrentHashMap<String, ClientAuthenticationInfo>();
+        = new ConcurrentHashMap<String, ClientAuthenticationInfo>();
 
-    private Map<String, OAuthToken> oauthTokens = new ConcurrentHashMap<String, OAuthToken>();
+    private Map<ClientAuthenticationInfo, OAuthToken> oauthTokens
+        = new ConcurrentHashMap<ClientAuthenticationInfo, OAuthToken>();
 
     public ClientAuthenticationInfo getClientAuthenticationInfo(String consumerKey) {
         return clientAuthInfo.get(consumerKey);
     }
 
-    public OAuthToken generateOAuthToken(String consumerKey) {
-        String token = OAuthUtils.generateToken(consumerKey);
-        String tokenSecret = OAuthUtils.generateToken(consumerKey);
+    public OAuthToken generateOAuthToken(ClientAuthenticationInfo clientAuthenticationInfo) {
+        String token = OAuthUtils.generateToken();
+        String tokenSecret = OAuthUtils.generateToken();
 
         OAuthToken oAuthToken = new OAuthToken(token, tokenSecret);
-        oauthTokens.put(consumerKey, oAuthToken);
+        oauthTokens.put(clientAuthenticationInfo, oAuthToken);
         return oAuthToken;
     }
 

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/utils/OAuthUtils.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/utils/OAuthUtils.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/utils/OAuthUtils.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/main/java/org/apache/cxf/auth/oauth/utils/OAuthUtils.java Thu Jun 17 08:50:11 2010
@@ -31,7 +31,7 @@ public final class OAuthUtils {
 
     //todo random enough?
 
-    public static String generateToken(String generatorBase) {
+    public static String generateToken() {
         return UUID.randomUUID().toString();
     }
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceTest.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceTest.java?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceTest.java (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/java/org/apache/cxf/auth/oauth/endpoints/TemporaryCredentialServiceTest.java Thu Jun 17 08:50:11 2010
@@ -21,14 +21,18 @@
 package org.apache.cxf.auth.oauth.endpoints;
 
 import net.oauth.OAuth;
+import net.oauth.OAuthProblemException;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.client.WebClient;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriBuilder;
+import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 
@@ -37,37 +41,105 @@ import java.net.URI;
  */
 public class TemporaryCredentialServiceTest extends JUnit4SpringContextTests {
 
+    static final String TEMPORARY_CREDENTIALS_URL = "http://localhost:9001/auth/oauth/initiate";
+    Server s;
+
     @Test
-    public void testGetRequestService() throws Exception {
-        Server s = null;
-        try {
-            JAXRSServerFactoryBean sf = (JAXRSServerFactoryBean) ctx.getBean("oauthServer");
-
-            s = sf.create();
-
-            URI uri = UriBuilder.fromUri(new URI("http://localhost:9001/auth/oauth/initiate"))
-                    .queryParam("oauth_consumer_key", 12345678).queryParam("oauth_signature_method", "PLAINTEXT")
-                    .queryParam("oauth_callback", "http%3A%2F%2Fprinter.example.com%2Fready")
-                    .queryParam("oauth_signature", "secret%26").queryParam("oauth_nonce", "sfsdfsdfs")
-                    .queryParam("oauth_timestamp", String.valueOf(System.currentTimeMillis() / 1000))
-                    .buildFromEncoded();
-
-            WebClient cl = WebClient.create(uri);
-            cl.accept("application/x-www-form-urlencoded");
-
-            Response r = cl.post(null);
-
-            OAuthResponseMessage message = new OAuthResponseMessage(null, null, null, (InputStream) r.getEntity());
-            message.completeParameters();
-            message.requireParameters(OAuth.OAUTH_CALLBACK_CONFIRMED, OAuth.OAUTH_TOKEN, OAuth.OAUTH_TOKEN_SECRET);
-
-            assertEquals(3, message.getParameters().size());
-            assertEquals(HttpServletResponse.SC_OK, r.getStatus());
-
-        } finally {
-            if (s != null) {
-                s.destroy();
-            }
+    public void testGetTemporaryCredentialsURIQuery() throws Exception {
+
+        //test request uri query
+        URI uri = UriBuilder.fromUri(new URI(TEMPORARY_CREDENTIALS_URL))
+            .queryParam("oauth_consumer_key", 12345678).queryParam("oauth_signature_method", "PLAINTEXT")
+            .queryParam("oauth_callback", "http%3A%2F%2Fprinter.example.com%2Fready")
+            .queryParam("oauth_signature", "secret%26").queryParam("oauth_nonce", "sfsdfsdfs")
+            .queryParam("oauth_timestamp", String.valueOf(System.currentTimeMillis() / 1000))
+            .buildFromEncoded();
+
+        WebClient cl = WebClient.create(uri);
+        cl.accept("application/x-www-form-urlencoded");
+        Response r = cl.post(null);
+
+        validateOAuthMessage(r);
+
+    }
+
+    @Test
+    public void invokeTemporaryCredentialsBody() throws Exception {
+        //test request uri query
+        URI uri = UriBuilder.fromUri(new URI(TEMPORARY_CREDENTIALS_URL))
+            .buildFromEncoded();
+
+        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+        StringBuilder formEncodedBody = new StringBuilder(OAuth.OAUTH_CONSUMER_KEY)
+            .append("=12345678&").append(OAuth.OAUTH_SIGNATURE_METHOD)
+            .append("=PLAINTEXT&").append(OAuth.OAUTH_SIGNATURE)
+            .append("=secret%26&")
+            .append(OAuth.OAUTH_NONCE).append("=sfsdfsdfs&")
+            .append(OAuth.OAUTH_TIMESTAMP).append("=").append(timestamp)
+            .append("&").append(OAuth.OAUTH_CALLBACK)
+            .append("=http%3A%2F%2Fprinter.example.com%2Fready");
+
+        WebClient cl = WebClient.create(uri);
+        cl.accept("application/x-www-form-urlencoded");
+
+
+        Response r = cl.post(formEncodedBody.toString());
+        assertEquals(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE, r.getStatus());
+
+        cl.header("Content-Type", OAuth.FORM_ENCODED);
+        r = cl.post(formEncodedBody.toString());
+        validateOAuthMessage(r);
+    }
+
+    @Test
+    public void testGetTemporaryCredentialsAuthHeader() throws Exception {
+
+
+        //test request uri query
+        URI uri = UriBuilder.fromUri(new URI(TEMPORARY_CREDENTIALS_URL))
+            .buildFromEncoded();
+
+        WebClient cl = WebClient.create(uri);
+        cl.accept("application/x-www-form-urlencoded");
+
+        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
+        StringBuilder authHeader = new StringBuilder("OAuth realm=\"Example\",")
+            .append(OAuth.OAUTH_CONSUMER_KEY).append("=\"12345678\",")
+            .append(OAuth.OAUTH_SIGNATURE_METHOD).append("=\"PLAINTEXT\",")
+            .append(OAuth.OAUTH_SIGNATURE).append("=\"secret%26\",")
+            .append(OAuth.OAUTH_NONCE).append("=\"sfsdfsdfs\",")
+            .append(OAuth.OAUTH_TIMESTAMP).append("=\"").append(timestamp)
+            .append("\",").append(OAuth.OAUTH_CALLBACK)
+            .append("=\"http%3A%2F%2Fprinter.example.com%2Fready\"");
+
+        cl.header("Authorization", authHeader.toString());
+        Response r = cl.post(null);
+
+        validateOAuthMessage(r);
+    }
+
+    private void validateOAuthMessage(Response r) throws IOException, OAuthProblemException {
+        OAuthResponseMessage message = new OAuthResponseMessage(null, null, null,
+            (InputStream)r.getEntity());
+        message.completeParameters();
+        message.requireParameters(OAuth.OAUTH_CALLBACK_CONFIRMED, OAuth.OAUTH_TOKEN,
+            OAuth.OAUTH_TOKEN_SECRET);
+
+        assertEquals(3, message.getParameters().size());
+        assertEquals(HttpServletResponse.SC_OK, r.getStatus());
+    }
+
+
+    @Before
+    public void initService() {
+        JAXRSServerFactoryBean sf = (JAXRSServerFactoryBean)ctx.getBean("oauthServer");
+        s = sf.create();
+    }
+
+    @After
+    public void stopService() {
+        if (s != null) {
+            s.destroy();
         }
     }
 }

Modified: cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/resources/oauth-beans.xml
URL: http://svn.apache.org/viewvc/cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/resources/oauth-beans.xml?rev=955511&r1=955510&r2=955511&view=diff
==============================================================================
--- cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/resources/oauth-beans.xml (original)
+++ cxf/sandbox/oauth_1.0a/rt/rs/oauth/src/test/resources/oauth-beans.xml Thu Jun 17 08:50:11 2010
@@ -12,14 +12,16 @@
         </jaxrs:serviceBeans>
     </jaxrs:server>
 
-    <bean id="temporaryCredentialService" class="org.apache.cxf.auth.oauth.endpoints.TemporaryCredentialServiceImpl">
+    <bean id="temporaryCredentialService"
+          class="org.apache.cxf.auth.oauth.endpoints.TemporaryCredentialServiceImpl">
         <property name="oAuthDataProvider" ref="oauthDataProvider"/>
     </bean>
 
     <bean id="oauthDataProvider" class="org.apache.cxf.auth.oauth.provider.OAuthDataProviderImpl">
         <property name="clientAuthInfo">
-            <map  key-type="java.lang.String" value-type="org.apache.cxf.auth.oauth.provider.ClientAuthenticationInfo">
-                <entry key="12345678" value-ref="clientAuthInfo" />
+            <map key-type="java.lang.String"
+                 value-type="org.apache.cxf.auth.oauth.provider.ClientAuthenticationInfo">
+                <entry key="12345678" value-ref="clientAuthInfo"/>
             </map>
         </property>
     </bean>
@@ -27,6 +29,7 @@
     <bean id="clientAuthInfo" class="org.apache.cxf.auth.oauth.provider.ClientAuthenticationInfoImpl">
         <constructor-arg value="12345678"/>
         <constructor-arg value="secret"/>
+        <constructor-arg value="http://www.example.com/callback"/>
     </bean>