2010-04-26 7 views
2

Nous essayons de faire fonctionner OAuth à 2 pattes avec le flux atomique Gmail. Nous utilisons la bibliothèque Java de John Kristian, Praveen Alavilli et Dirk Balfanz. [http://oauth.net/code/]] au lieu de la bibliothèque GData.OAuth à 2 pattes et le flux atomique Gmail

Nous savons que nous avons le bon CONSUMER_KEY et CONSUMER_SECRET, etc. parce que cela fonctionne avec le flux de contacts (http://www.google.com/m8/feeds/contacts/default/full) et n'ont pas de problèmes. Cependant, avec le flux atomique Gmail, il renvoie toujours: HTTP/1.1 401 Non autorisé

Des idées? Devrions-nous essayer un autre framework OAuth ou le problème réside-t-il du côté de Google?

Répondre

3

Nous pensons que cela fonctionne avec les bibliothèques OAuth mais pas avec la bibliothèque GData.

Snippet de code est:

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 = "[email protected]+"; 
    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<Map.Entry<String, String>> params = request.getParameters(); 
      for (Map.Entry<String, String> 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("====================================================="); 
    } 
} 
2

Mettre les données OAuth dans l'en-tête d'autorisation, et non sur l'URI.

Questions connexes