2010-10-22 7 views
1

Я пытаюсь реализовать гибридный протокол OpenID + OAuth в своем приложении для Google. Я получаю токен запроса. Итак, следующим шагом в качестве документа в Federated Login является токен обменного запроса для токена доступа.Как получить токен доступа из токена запроса для OpenID + OAuth с помощью java

Я пробовал его с использованием библиотеки Java OAuth, но я не получаю токен доступа. Я стараюсь, чтобы оба подхода с тремя ногами и двумя ногами не увенчались успехом.

Неужели кому-то удастся выполнить гибридный протокол.

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, если я добавлю эти строки в код, я получаю недопустимое исключение AuthSub Token, я не знаю, почему это говорит о недопустимом AuthSub.

+0

Вам нужно включить больше информации. * Почему это не работает? Что пошло не так? Есть ли сообщения об ошибках? Объясните, как вы пытаетесь это сделать. Мы не читатели. – Qwerky

+0

Спецификации OAuth имеют 2 спецификации 1) 3-Legged и 2) 2-legged. В трехногих участвуют 3 участника 1) поставщик услуг 2) Потребитель и 3) Пользователь В 2-х ногах только 2 стороны, привлеченные 1) поставщик услуг и 2) потребитель и пользователь - это один и тот же объект (принадлежит к одному домену). Вышеупомянутый код, упомянутый выше, предназначен для двухэтапного процесса аутентификации, для которого не нужен токен доступа. Но нужен ключ потребителя и секретный ключ, требуя, чтобы ему нужно указать идентификатор электронной почты того же домена, например: user @ cosnumerkey. Это единственный сценарий, в котором мы используем двухэтапный процесс аутентификации. – JAVAC

+0

Почему бы вам не использовать существующую библиотеку? –

ответ

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); 
    } 
} 
Смежные вопросы