使用google-api-java-client的2脚OAuth

use*_*499 4 java oauth google-api 2-legged google-api-java-client

有谁知道如何使用google-api-java-client使用2脚OAuth?我正在尝试访问Google Apps Provisioning API以获取特定域的用户列表.

以下不起作用

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);
Run Code Online (Sandbox Code Playgroud)

我收到"com.google.api.client.http.HttpResponseException:401 Unknown authorization header".标题看起来像这样

OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="...", oauth_version="1.0"
Run Code Online (Sandbox Code Playgroud)

我也尝试过没有成功

GoogleOAuthDomainWideDelegation delegation = new GoogleOAuthDomainWideDelegation();
delegation.requestorId = REQUESTOR_ID;
delegation.signRequests(transport, oauthParameters);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢.

use*_*499 6

似乎代码没有任何问题.它确实有效.问题出在我们的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" 
Run Code Online (Sandbox Code Playgroud)

似乎这不包括Provisioning API.只有在我们明确添加Provisioning API之后,代码才开始工作.因此,要启用Provisioning 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
Run Code Online (Sandbox Code Playgroud)

Somone有同样的问题:

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

莎莎