0

我正在使用 oauth 1.0,直到现在我可以成功地从 Google 获取访问令牌。但是当我想从https://www.google.com/m8/feeds/contacts/default/full检索用户联系人时,它返回 401 错误并且没有进一步的解释。

我发现 Google Playground 中的信息可能并不准确,例如第 3 步和第 5 步中的签名基本字符串包含 oauth_version 但它是错误的。(如果包含 oauth_version,它将返回 signature_invalid 并且不包含 oauth_version)

这是我的要求:

   HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sbGetContacts.ToString());
        req.Method = "GET";
        req.Headers.Add(authHeader);
        HttpWebResponse res = (HttpWebResponse)req.GetResponse();

这是我的标题:

        string authHeader = "Authorization: OAuth " +
        "oauth_version=" + "\"" + "1.0" + "\"" + "\"," +
        "oauth_nonce=" + "\"" + nonce + "\"," +
        "oauth_timestamp=" + "\"" + timeStamp + "\"," +
        "oauth_consumer_key=" + "\"" + GoogleconsumerKey + "\"," +
        "oauth_token=" + "\"" + OauthToken+ "\"," +
        "oauth_signature_method=" + "\"" + "HMAC-SHA1" + "\"," +
        "oauth_signature=" + "\"" + UpperCaseUrlEncode(sig) + "\"";

谁能告诉我如何解决这个问题?

4

2 回答 2

0

OAuth1 已被弃用(由 Google)。请不要花费任何精力使用 OAuth1 编写新代码。使用 OAuth2 没有签名和加密。您是否有理由需要使用 OAuth1?我们想知道。我在 Google 从事 OAuth 工作。

于 2013-07-20T06:16:46.987 回答
0

实际上:

如果您的应用程序有某些不寻常的授权要求,例如在请求数据访问(混合)或域范围授权 (2LO) 的同时登录,那么您目前无法使用 OAuth 2.0 令牌。在这种情况下,您必须改为使用 OAuth 1.0 令牌和 API 密钥。您可以在 Google API 控制台的 API 访问窗格的简单 API 访问部分中找到应用程序的 API 密钥。

根据https://developers.google.com/google-apps/contacts/v3/?hl=fr

所以你需要传递一个 API 密钥。您可以通过将 key='YOUR_API_KEY' 添加到 URL 来执行此操作,但是如果您使用的是 gdata 客户端库,如何传递 API 密钥?

于 2013-10-31T00:35:56.500 回答