双腿OAuth和Gmail原子提要 [英] 2-legged OAuth and the Gmail atom feed

查看:152
本文介绍了双腿OAuth和Gmail原子提要的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在尝试让双腿OAuth使用Gmail原子提要。我们使用John Kristian,Praveen Alavilli和Dirk Ba​​lfanz提供的Java库。 [ http://oauth.net/code/] 而不是GData库。



我们知道我们有正确的CONSUMER_KEY和CONSUMER_SECRET等等,因为它可以与联系人供稿一起使用( http://www.google.com/m8/feeds/contacts/default/full )并且没有问题。但是,使用Gmail原子提要时,它始终会返回:HTTP / 1.1 401未授权



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

解决方案

我们认为我们可以使用OAuth库,但不能使用GData库。

代码片段为:

  import static net.oauth.OAuth.HMAC_SHA1; 
导入静态net.oauth.OAuth.OAUTH_SIGNATURE_METHOD;

import java.net.URL;
import java.util.List;
import java.util.Map;

导入net.oauth.OAuthAccessor;
import net.oauth.OAuthConsumer;
导入net.oauth.OAuthMessage;
导入net.oauth.ParameterStyle;
import net.oauth.SimpleOAuthValidator;
import net.oauth.client.OAuthClient;
导入net.oauth.client.httpclient4.HttpClient4;


/ **
*示例应用程序演示如何在Google Data
* Java客户端中执行双腿OAuth。请参阅下面的评论以了解详细信息。
*
* /
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 {

//这应该作为参数传入
String user = username +@ + CONSUMER_KEY;

OAuthConsumer consumer = new OAuthConsumer(null,CONSUMER_KEY,CONSUMER_SECRET,null);
OAuthAccessor访问器=新OAuthAccessor(消费者);

// HMAC使用访问令牌密钥作为因子,
//并且它比RSA的计算密集度稍低。
accessor.consumer.setProperty(OAUTH_SIGNATURE_METHOD,HMAC_SHA1);

// Gmail只支持原子提要
URL atomFeedUrl =新网址(SCOPE +?xoauth_requestor_id =+ user);

System.out.println(=================================== ==================);
System.out.println(构建新的请求消息...);

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(客户端调用请求消息...);
System.out.println(request:+ request);
OAuthMessage消息= client.invoke(request,ParameterStyle.AUTHORIZATION_HEADER);

System.out.println(=================================== ==================);
System.out.println(message:+ message.readBodyAsString());
System.out.println(======================================= ==============);
}
}


We're trying to get 2-legged OAuth to work with the Gmail atom feed. We're using the Java library contributed by John Kristian, Praveen Alavilli and Dirk Balfanz. [http://oauth.net/code/] instead of the GData library.

We know we have the correct CONSUMER_KEY and CONSUMER_SECRET, etc. becuase it works with the Contacts feed (http://www.google.com/m8/feeds/contacts/default/full) and have no problems. However with Gmail atom feed it always returns: HTTP/1.1 401 Unauthorized

Any ideas? Should we try a different OAuth framework or does the problem lie on the Google side?

解决方案

We think we got it working with the OAuth libraries but not with the GData library.

Snippet of code is:

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<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("=====================================================");
    }
}

这篇关于双腿OAuth和Gmail原子提要的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆