google oauth 1.0 standalone app example

!!!OAuth in the Google Data Protocol Client Libraries讲解: http://code.google.com/intl/zh-TW/apis/gdata/docs/auth/oauth.html


package example_tomson.oauth1;

import java.net.URL;

import com.google.gdata.client.GoogleService;
import com.google.gdata.client.authn.oauth.GoogleOAuthHelper;
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters;
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthRsaSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthSigner;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.Feed;

/**
 * 
 * google oauth 1.0请参看http://blog.csdn.net/totogogo/article/details/6835820
 *
 * 该example是演示google oauth 1.0, it is for standalone application,即没有callback_url parameter。没有设置
 * callback url parameter,就会认为是anonymous。当user click了authorize button后,就会出现一个google handle result msg web page
 * 
 * 而如果是web app使用oauth 1.0,就会设置callback url,当user click了authorize button后,
 *  就会redirect to callback url with authorized token and related params
 * 
 * standalone app使用auth 1.0时同样需要register a domain来获取consumer key and secret.
 * 
 * 
 */
public class OAuth1Example {

	public static void main(String[] args) throws Exception{
		//该comsumer key是
		String oauthConsumerKey="chtl.hkbu.edu.hk";
		String oauthConsumerSecret="XXXXXX";
		
		String signatureMethod="HMAC";  //HMAC or RSA
		
		//for calendar api
		String scope = "http://www.google.com/calendar/feeds/";
 String strCalendarFeedUrl="http://www.google.com/calendar/feeds/default/allcalendars/full";

	    
	    // STEP 1: Set up the OAuth objects
	    

	    // You first need to initialize a few OAuth-related objects.
	    // GoogleOAuthParameters holds all the parameters related to OAuth.
	    // OAuthSigner is responsible for signing the OAuth base string.
		
		//创建GoogleOAuthParameters实例,它包含所有oauth parameter
		GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
	    oauthParameters.setOAuthConsumerKey(oauthConsumerKey);
	    oauthParameters.setScope(scope);
	    
	    // Initialize the OAuth Signer.  If you are using RSA-SHA1, you must provide
	    // your private key as a Base-64 string conforming to the PKCS #8 standard.
	    // Visit http://code.google.com/apis/gdata/authsub.html#Registered to learn
	    // more about creating a key/certificate pair.  If you are using HMAC-SHA1,
	    // you must set your OAuth Consumer Secret, which can be obtained at
	    // https://www.google.com/accounts/ManageDomains.
	    
	    //创建oauth signer实例
	    OAuthSigner signer=null;
	    if(signatureMethod=="HMAC") {  //如果使用HMAC-SHA1 method,则需要在GoogleOAuthParameters obj里提供OAuth Consumer Secret(使用RSA-SHA1 method则不需要提供它)
	        oauthParameters.setOAuthConsumerSecret(oauthConsumerSecret);
	        signer = new OAuthHmacSha1Signer();
	    } else if(signatureMethod=="RSA"){ //如果使用RSA-SHA1 method,你必须提供你的符合PKCS #8标准的private key as a Base-64 string 
	    	String signatureKey="<RSA private key>";
	        signer = new OAuthRsaSha1Signer(signatureKey);
	    }
	    

	    
	    // STEP 2: Get the Authorization URL
	    

	    // Create a new GoogleOAuthHelperObject.  This is the object you will use for all OAuth-related interaction.
	    //以oauth signer obj为参数创建GoogleOAuthHelper obj,然后以GoogleOAuthParameters作为参数call getUnauthorizedRequestToken method来获取unauthorized request token
	    GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);
	    oauthHelper.getUnauthorizedRequestToken(oauthParameters); //send a request to get the unauthorized request token
	    														  //!!!然后它会把response返回的 unauthorized request token和token secret写入oauthParameters object里

//	    System.out.println("=====================================================");
//	    System.out.println("auth token is: " + oauthParameters.getOAuthToken());
//	    System.out.println("auth token secret is: "+oauthParameters.getOAuthTokenSecret());
//	    System.out.println("auth signature is: " + oauthParameters.getOAuthSignature());
//	    System.out.println("auth signature method is: " + oauthParameters.getOAuthSignatureMethod());
//	    System.out.println("auth Nonce is: " + oauthParameters.getOAuthNonce());
//	    System.out.println("auth Verifier is: " + oauthParameters.getOAuthVerifier());
//	    System.out.println("=====================================================");

	    
	    // Get the authorization url.  The user of your application must visit
	    // this url in order to authorize with Google.  If you are building a
	    // browser-based application, you can redirect the user to the authorization url.
	    
	    //call createUserAuthorizationUrl method来生成供user进行authorize OAuth request token的URL
	    //user可以在browser里access to this URL,然后click authorization button来允许该app能够进入你的google账户里获取data/info/file
	    String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
	    System.out.println(requestUrl);
	    System.out.println("Please visit the URL above to authorize your OAuth request token.  Once that is complete, press any key to continue...");
	    System.in.read();
	    

	    
	    // STEP 3: Get the Access Token
	    

	    // Once the user authorizes with Google, the request token can be exchanged
	    // for a long-lived access token.  If you are building a browser-based
	    // application, you should parse the incoming request token from the url and
	    // set it in GoogleOAuthParameters before calling getAccessToken().
	    
	    //!!注意:在上一个step,user赋予授权之后,并不需要从browser里获取任何返回的parameter value
	    //(感觉只需要对request token进行authorize即可),然后就可以call 
	    //			oauthHelper.getAccessToken(oauthParameters)
	    //来获取access token,
	    //!!!同时会把oauthParameters里的oauth token的值由authorized request token转换成access token!!!
	    String token = oauthHelper.getAccessToken(oauthParameters);
	    System.out.println("OAuth Access Token: " + token);

	    
	    // STEP 4: access calendar api
	    
	    URL feedUrl = new URL(strCalendarFeedUrl);
	    System.out.println("Sending request to " + feedUrl.toString());
	    System.out.println();
	    
		String googleServiceName = "cl";
	    GoogleService googleService = new GoogleService(googleServiceName, "oauth-sample-app");

	    // Set the OAuth credentials which were obtained from the step above.
	    //参数oauthParameters包含上一个step获取的access token info
	    googleService.setOAuthCredentials(oauthParameters, signer);

	    //!!!关键方法:Make the request to Google
	    BaseFeed resultFeed = googleService.getFeed(feedUrl, Feed.class);
	    
	    System.out.println("Response Data:");
	    System.out.println("=====================================================");
	    System.out.println("| TITLE: " + resultFeed.getTitle().getPlainText());
	    if (resultFeed.getEntries().size() == 0) {
	      System.out.println("|\tNo entries found.");
	    } else {
	      for (int i = 0; i < resultFeed.getEntries().size(); i++) {
	        BaseEntry entry = (BaseEntry) resultFeed.getEntries().get(i);
	        System.out.println("|\t" + (i + 1) + ": "
	            + entry.getTitle().getPlainText());
	      }
	    }
	    System.out.println("=====================================================");
	    System.out.println();


	    
	    // STEP 5: Revoke the OAuth token
	    

	    System.out.println("Revoking OAuth Token...");
	    oauthHelper.revokeToken(oauthParameters);
	    System.out.println("OAuth Token revoked...");
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值