【问题标题】:2-legged OAuth with google-api-java-client带有 google-api-java-client 的 2-legged OAuth
【发布时间】:2011-04-14 13:43:17
【问题描述】:

有谁知道如何将 2-legged OAuth 与 google-api-java-client 一起使用? 我正在尝试访问 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 authentication 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);

有什么想法吗? 提前致谢。

【问题讨论】:

  • 如果您不介意,请添加“google-api-java-client”标签吗?

标签: java oauth google-api 2-legged google-api-java-client


【解决方案1】:

代码似乎没有任何问题。它确实有效。 问题出在我们的 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/

莎莎

【讨论】:

    【解决方案2】:

    想必您正试图在这里获取未经授权的请求令牌?我没有使用 Google 实现,但 OAuth 1.0a 规范说你需要一个回调 URL,而你没有。这可能是一个红鲱鱼,因为规范说缺少的参数应该返回 HTTP 代码 400 而不是 401。

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

    【讨论】:

    • 感谢您的回答,但问题似乎出在我们的 Google Apps 设置上。代码应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多