2010-10-22 196 views
1

我想在我的Google應用中實施OpenID + OAuth混合協議。 我正在獲取請求令牌。因此,作爲聯合登錄中文檔的下一步是訪問令牌的交換請求令牌。如何從請求令牌獲取使用java的OpenID + OAuth的訪問令牌

我嘗試過使用OAuth java庫,但我沒有獲取訪問令牌。我正在嘗試三腳和雙腳的方法都不成功。

是否有人成功地完成混合協議。

GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
     oauthParameters.setOAuthConsumerKey(consumerKey); 
     oauthParameters.setOAuthConsumerSecret(consumerSecret); 

     calendarService = new CalendarService("marketplace-hello"); 
     try { 
      calendarService.setOAuthCredentials(oauthParameters, 
new OAuthHmacSha1Signer()); 
      CalendarEventFeed results = calendarService.query(calendarFeedUrl, 
CalendarFeed.class); 
     } 
catch (OAuthException e) 
{  
throw new ServletException("Unable to initialize calendar service", e); 
} 

這是投擲com.google.gdata.client.authn.oauth.OAuthException:組oauth_token不存在。

oAuthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);和xoauth_requestor_id attibute to feedURL如果我在代碼中添加這些行我得到Invalid AuthSub令牌異常我不知道它爲什麼說無效的AuthSub。

+0

您需要包括更多的信息。 *爲什麼*不起作用?出了什麼問題?有沒有錯誤信息?解釋你是如何嘗試去做的。我們不介意讀者。 – Qwerky 2010-10-22 09:17:21

+0

OAuth規範有2個規範1)3腿和2)2腿。 在三方中有3方涉及1)服務提供商2)消費者和3)用戶 在雙方只有2方服務1)服務提供商和2)消費者和用戶是同一實體(屬於同一個域)。 上面提到的代碼是用於不需要訪問令牌的雙腿認證過程。但在請求他需要給出同一域的電子郵件ID時需要使用密鑰和密鑰,例如:user @ cosnumerkey。這是我們使用雙腿認證過程的唯一場景。 – JAVAC 2010-10-29 06:39:41

+0

爲什麼不使用現有的庫? – 2010-11-23 17:22:55

回答

1

我的回答here可能會幫助你。

或嘗試這與你的requestToken:

import net.oauth.OAuth; 
import net.oauth.OAuthAccessor; 
import net.oauth.OAuthConsumer; 
import net.oauth.OAuthMessage; 
import net.oauth.OAuthServiceProvider; 
import net.oauth.client.OAuthClient; 
import net.oauth.client.httpclient4.HttpClient4; 

public class Try { 

    public static void doit(String requestToken) throws Exception { 

     String requestUrl = "https://www.google.com/accounts/OAuthGetRequestToken"; 
     String authorizeUrl = "https://www.google.com/accounts/OAuthAuthorizeToken"; 
     String accessUrl = "https://www.google.com/accounts/OAuthGetAccessToken"; 
     String consumerKey = "XXXXX"; 
     String consumerSecret = "XXXXX"; 
     String callbackUrl = "XXXXX"; 

     OAuthServiceProvider provider = new OAuthServiceProvider(requestUrl, 
       authorizeUrl, accessUrl); 

     OAuthConsumer consumer = new OAuthConsumer(callbackUrl, consumerKey, 
       consumerSecret, provider); 

     consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.HMAC_SHA1); 

     OAuthClient client = new OAuthClient(new HttpClient4()); 

     OAuthAccessor accessor = new OAuthAccessor(consumer); 
     accessor.requestToken = requestToken; 

     OAuthMessage result = client.getAccessToken(accessor, null, null); 

     System.out.println(accessor.accessToken); 
     System.out.println(accessor.tokenSecret); 
    } 
} 
相關問題