2010-09-20 7 views
4

Est-ce que quelqu'un sait comment utiliser OAuth à 2 pattes avec google-api-java-client? J'essaie d'accéder à l'API Google Apps Provisioning pour obtenir la liste des utilisateurs d'un domaine particulier.OAuth à 2 pattes avec google-api-java-client

Ce qui suit ne fonctionne pas

HttpTransport transport = GoogleTransport.create(); 
GoogleHeaders headers = (GoogleHeaders) transport.defaultHeaders; 
headers.setApplicationName(APPLICATION_NAME); 
headers.gdataVersion = GDATA_VERSION; 

OAuthHmacSigner signer = new OAuthHmacSigner(); 
signer.clientSharedSecret = CONSUMER_SECRET; 

OAuthParameters oauthParameters = new OAuthParameters(); 
oauthParameters.version = OAUTH_VERSION; 
oauthParameters.consumerKey = CONSUMER_KEY; 
oauthParameters.signer = signer; 
oauthParameters.signRequestsUsingAuthorizationHeader(transport); 

je reçois le "com.google.api.client.http.HttpResponseException: 401 tête d'autorisation inconnue". L'en-tête ressemble à ceci

OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="...", oauth_version="1.0" 

J'ai aussi essayé la suite sans succès

GoogleOAuthDomainWideDelegation delegation = new GoogleOAuthDomainWideDelegation(); 
delegation.requestorId = REQUESTOR_ID; 
delegation.signRequests(transport, oauthParameters); 

Toutes les idées? Merci d'avance.

+0

Si vous ne 't esprit, aimeriez-vous ajouter "google-api-java-client" tag? –

Répondre

0

Vraisemblablement, vous essayez d'obtenir un jeton de requête non autorisé ici? Je n'ai pas utilisé l'implémentation Google, mais la spécification OAuth 1.0a indique que vous avez besoin d'une URL de rappel que vous n'avez pas. Cela pourrait être un hareng rouge comme la spécification dit un manque param doit retourner le code HTTP 400 non 401.

Voir http://oauth.net/core/1.0a/#auth_step1

+0

Merci pour la réponse, mais il semble que le problème était avec notre configuration de Google Apps. Le code devrait fonctionner correctement. – user452499

6

Il semble qu'il n'y avait rien de mal avec le code. Cela fonctionne réellement. Le problème résidait dans l'installation de Google Apps.

Lorsque vous visitez le « Gérer la clé OAuth et secret pour ce domaine » la page (https://www.google.com/a/cpanel/YOUR-DOMAIN/SetupOAuth), et activez « à deux pattes de contrôle d'accès OAuth » et sélectionnez « Autoriser l'accès à toutes les API », il ne fait pas autoriser l'accès à toutes les API.

Si vous visitez le « Gérer l'accès client API » page après que (https://www.google.com/a/cpanel/YOUR-DOMAIN/ManageOauthClients), vous verrez qu'il ya une entrée comme:

YOR-DOMAIN/CONSUMER-KEY "This client has access to all APIs" 

Il semble que cela ne comprend pas Provisioning API Après avoir ajouté explicitement l'API Provisioning, le code a commencé à fonctionner. Donc, pour activer l'API d'approvisionnement, vous devez également avoir quelque chose comme l'entrée suivante dans la liste:

YOR-DOMAIN/CONSUMER-KEY Groups Provisioning (Read only) https://apps-apis.google.com/a/feeds/group/#readonly 
         User Provisioning (Read only) https://apps-apis.google.com/a/feeds/user/#readonly 

Somone autre avait le même problème:

http://www.gnegg.ch/2010/06/google-apps-provisioning-two-legged-oauth/

Sasa