Двухсторонний OAuth с google-api-java-client - PullRequest
4 голосов
/ 20 сентября 2010

Кто-нибудь знает, как использовать 2-х сторонний OAuth с google-api-java-client? Я пытаюсь получить доступ к API обеспечения Служб Google, чтобы получить список пользователей для определенного домена.

Следующее не работает

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);

Я получаю «com.google.api.client.http.HttpResponseException: 401 Неизвестный заголовок авторизации». Заголовок выглядит примерно так

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

Я также пытался следовать без успеха

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

Есть идеи? Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 21 сентября 2010

Похоже, с кодом все в порядке.Это на самом деле работает.Проблема была с нашей настройкой Google Apps.

Когда вы посещаете страницу «Управление ключом OAuth и секретом для этого домена» (https://www.google.com/a/cpanel/YOUR-DOMAIN/SetupOAuth), и включаете «Управление доступом OAuth на двух ножках» и выбираете «Разрешить доступ ко всем API»,фактически не разрешать доступ ко всем API.

Если после этого вы перейдете на страницу «Управление доступом к клиенту API» (https://www.google.com/a/cpanel/YOUR-DOMAIN/ManageOauthClients),, вы увидите, что есть запись типа:

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

Кажется, что это не включает API предоставления. Только после того, как мы явно добавили API предоставления, код начал работать. Поэтому, чтобы включить API обеспечения, у вас также должна быть что-то вроде следующей записи в вашем списке:

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

У кого-то еще была такая же проблема:

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

Саша

0 голосов
/ 20 сентября 2010

Предположительно, вы пытаетесь получить токен неавторизованного запроса здесь? Я не использовал реализацию Google, но спецификация OAuth 1.0a говорит, что вам нужен URL обратного вызова, которого у вас нет. Это может быть красная сельдь, поскольку в спецификации говорится, что отсутствующий параметр должен возвращать код HTTP 400, а не 401.

См. http://oauth.net/core/1.0a/#auth_step1

...