2013-03-04 11 views
7

Sono stato alla ricerca di esempi di autenticazione utilizzando il pacchetto OAuth java google: https://code.google.com/p/google-oauth-java-client/Esempi di OAuth1 usando google-api-java-OAuth

sono riuscito a trovare esempi per l'autenticazione OAuth2 che utilizzano questo pacchetto, ma non ne trovo nessuno per Oauth1. La documentazione fornisce una breve descrizione di un "tipico flusso di applicazioni", ma non tiene conto di tutti i dettagli.

Qualcuno ha qualche suggerimento per dove posso trovare esempi di autenticazione oauth1 usando il pacchetto di cose?

risposta

9

Sulla base google-oauth-java-client JavaDoc e RFC 5849 l'esempio dovrebbe apparire come segue:

OAuthHmacSigner signer = new OAuthHmacSigner(); 
    // Get Temporary Token 
    OAuthGetTemporaryToken getTemporaryToken = new OAuthGetTemporaryToken(TOKEN_SERVER_URL); 
    signer.clientSharedSecret = OAuth2ClientCredentials.CONSUMER_SECRET; 
    getTemporaryToken.signer = signer; 
    getTemporaryToken.consumerKey = OAuth2ClientCredentials.CONSUMER_KEY; 
    getTemporaryToken.transport = new NetHttpTransport(); 
    OAuthCredentialsResponse temporaryTokenResponse = getTemporaryToken.execute(); 

    // Build Authenticate URL 
    OAuthAuthorizeTemporaryTokenUrl accessTempToken = new OAuthAuthorizeTemporaryTokenUrl(AUTHENTICATE_URL); 
    accessTempToken.temporaryToken = temporaryTokenResponse.token; 
    String authUrl = accessTempToken.build(); 

    // Redirect to Authenticate URL in order to get Verifier Code 
    System.out.println(authUrl); 

    // Get Access Token using Temporary token and Verifier Code 
    OAuthGetAccessToken getAccessToken = new OAuthGetAccessToken(ACCESS_TOKEN_URL); 
    getAccessToken.signer = signer; 
    getAccessToken.temporaryToken=temporaryTokenResponse.token; 
    getAccessToken.transport = new NetHttpTransport(); 
    getAccessToken.verifier= "VERIFIER_CODE"; 
    getAccessToken.consumerKey = OAuth2ClientCredentials.CONSUMER_KEY; 
    OAuthCredentialsResponse accessTokenResponse = getAccessToken.execute(); 

    // Build OAuthParameters in order to use them while accessing the resource 
    OAuthParameters oauthParameters = new OAuthParameters(); 
    signer.tokenSharedSecret = accessTokenResponse.tokenSecret; 
    oauthParameters.signer = signer; 
    oauthParameters.consumerKey = OAuth2ClientCredentials.CONSUMER_KEY; 
    oauthParameters.token = accessTokenResponse.token; 
    oauthParameters.verifier = "VERIFIER_CODE"; 

    // Use OAuthParameters to access the desired Resource URL 
    HttpRequestFactory requestFactory = new NetHttpTransport().createRequestFactory(oauthParameters); 
    GenericUrl genericUrl = new GenericUrl("RESOURCE_URL"); 
    HttpResponse response = requestFactory.buildGetRequest(genericUrl).execute(); 
    System.out.println(response.parseAsString()); 

Spero che questo aiuti.

1

L'esempio precedente è stato estremamente utile.

Una nota sull'utilizzo di questa libreria con implementazioni oAuth 1.0 non standard. Stavo usando lo Goodreads oAuth API, e sembra essere quello che lo oAuth Bible chiama "un'implementazione a 3 zampe di OAuth 1.0a fallita", il che significa che non restituisce un codice di verifica dopo aver reindirizzato l'utente autorizzato all'URL di richiamata. In questo caso, è necessario rimuovere tutte le righe si riferiscono a VERIFIER_CODE sopra e aggiungere:

signer.tokenSharedSecret = temporaryTokenResponse.tokenSecret; 

prima della riga:

OAuthCredentialsResponse accessTokenResponse = getAccessToken.execute(); 

Mi ci volle un po 'per capire, quindi speriamo che aiuta a qualcun altro.