有没有人知道如何在google-api-java-client中使用双腿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);
我收到“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"
我也尝试过没有成功
GoogleOAuthDomainWideDelegation delegation = new GoogleOAuthDomainWideDelegation();
delegation.requestorId = REQUESTOR_ID;
delegation.signRequests(transport, oauthParameters);
有什么想法吗? 提前谢谢。
答案 0 :(得分: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"
似乎这不包括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
其他人有同样的问题:
http://www.gnegg.ch/2010/06/google-apps-provisioning-two-legged-oauth/
莎莎
答案 1 :(得分:0)
据推测,您正试图在此处获取未经授权的请求令牌?我没有使用Google实施,但OAuth 1.0a规范说你需要一个你没有的回调网址。这可能是一个红色的鲱鱼,因为规范说缺少的参数应该返回HTTP代码400而不是401。