2段OAuth和GmailprimefacesFeed

我们正在努力让双腿OAuth与GmailprimefacesFeed一起使用。 我们使用的是John Kristian,Praveen Alavilli和Dirk Ba​​lfanz提供的Java库。 [ http://oauth.net/code/]而不是GData库。

我们知道我们有正确的CONSUMER_KEY和CONSUMER_SECRET等,因为它适用于联系人Feed( http://www.google.com/m8/feeds/contacts/default/full )并且没有任何问题。 但是,对于GmailprimefacesFeed,它始终返回:HTTP / 1.1 401 Unauthorized

有任何想法吗? 我们应该尝试不同的OAuth框架,还是问题出在Google方面?

我们认为我们使用了OAuth库,但没有使用GData库。

代码片段是:

import static net.oauth.OAuth.HMAC_SHA1; import static net.oauth.OAuth.OAUTH_SIGNATURE_METHOD; import java.net.URL; import java.util.List; import java.util.Map; import net.oauth.OAuthAccessor; import net.oauth.OAuthConsumer; import net.oauth.OAuthMessage; import net.oauth.ParameterStyle; import net.oauth.SimpleOAuthValidator; import net.oauth.client.OAuthClient; import net.oauth.client.httpclient4.HttpClient4; /** * Sample application demonstrating how to do 2-Legged OAuth in the Google Data * Java Client. See the comments below to learn about the details. * */ public class GmailAtomFeed2LeggedOauth { public static String CONSUMER_KEY = "test-1001.com"; public static String CONSUMER_SECRET = "zN0ttehR3@lSecr3+"; public static String SCOPE = "https://mail.google.com/mail/feed/atom"; public static String RESOURCE_URL = "https://mail.google.com/mail/feed/atom"; public static String SERVICE_NAME = "mail"; public static String username = "username"; public static boolean debug = true; public static void main(String[] args) throws Exception { // This should be passed in as a parameter String user = username + "@" + CONSUMER_KEY; OAuthConsumer consumer = new OAuthConsumer(null, CONSUMER_KEY, CONSUMER_SECRET, null); OAuthAccessor accessor = new OAuthAccessor(consumer); // HMAC uses the access token secret as a factor, // and it's a little less compute-intensive than RSA. accessor.consumer.setProperty(OAUTH_SIGNATURE_METHOD, HMAC_SHA1); // Gmail only supports an atom feed URL atomFeedUrl = new URL(SCOPE +"?xoauth_requestor_id=" + user); System.out.println("====================================================="); System.out.println("Building new request message..."); OAuthMessage request = accessor.newRequestMessage(OAuthMessage.GET, atomFeedUrl.toString(),null); if (debug) { List> params = request.getParameters(); for (Map.Entry p : params) { System.out.println("'" + p.getKey() + "' = <" + p.getValue() + ">"); } System.out.println("Validating message..."); SimpleOAuthValidator validator=new SimpleOAuthValidator(); validator.validateMessage(request,accessor); } OAuthClient client = new OAuthClient(new HttpClient4()); System.out.println("Client invoking request message..."); System.out.println(" request: " + request); OAuthMessage message = client.invoke(request, ParameterStyle.AUTHORIZATION_HEADER); System.out.println("====================================================="); System.out.println(" message: " + message.readBodyAsString()); System.out.println("====================================================="); } } 

将OAuth数据放在Authorization标头中,而不是URI上。