【问题标题】:401 unauthorized using google task401未经授权使用谷歌任务
【发布时间】:2011-12-17 19:41:59
【问题描述】:

我正在学习使用 google task api rest。

我已成功获得访问令牌。

现在我正在尝试使用此 url 获取任务列表:https://www.googleapis.com/tasks/v1/users/@me/lists

在谷歌任务文档中写道,我需要通过 HTTP 授权标头发送访问令牌,但我不知道如何 link

我在网上搜索了结果,但没有找到解决方案。 我也在这个网站上搜索过解决方案,但没有找到。

我在尝试 request.GetResponse(); 时遇到 401 未授权错误; 这是我的代码

 private AccessToken _accessToken = null;
private string Apikey = "my api key";
protected void Page_Load(object sender, EventArgs e)
{
    _accessToken = (AccessToken)Session["AccessTokken"];
    string _customerkey = "my customer key";
    string _customerSecret = "my customer secret key";
    Response.Write(_accessToken.Token);

    string nostring = "";
    string nnString = "";
    OAuthBase oauth = new OAuthBase();
    Uri t = new Uri("https://www.googleapis.com/tasks/v1/users/@me/lists");
    string u = oauth.GenerateSignature(t, _customerkey, _customerSecret, _accessToken.Token,
                                       _accessToken.TokenSecret, "GET", oauth.GenerateTimeStamp(),
                                       oauth.GenerateNonce(), out nostring, out nnString);

    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(nostring);
    request.Method = "GET";

    //request.Headers.Add("Authorization: Bearer " + _accessToken.Token);
    WebResponse response = request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());
    string responseString = reader.ReadToEnd();
    reader.Close();


    Response.Write(responseString);

【问题讨论】:

    标签: c# oauth httpwebrequest google-api


    【解决方案1】:

    有一个 Google 发布了一个 .Net library 用于访问 Google Api,这包括我建议使用此 Api 并从 samples 开始的项目发布者(包括 Task Api Sample)进行身份验证的助手。

    如果您想继续手动启动 Api 调用,您可以使用communications library,或查看source code,了解 Google 是如何进行通信的。

    编辑

    从上面链接的源代码中,您可以找到OAuth Authenticator,它添加了带有OAuthUtil.GenerateHeader 中指定值的http 标头System.Net.HttpRequestHeader.Authorization。相关部分复制如下。

    StringBuilder sb = new StringBuilder();
    sb.Append("Authorization: OAuth oauth_version=\"1.0\",");
    sb.AppendFormat("oauth_nonce=\"{0}\",", EncodingPerRFC3986(nonce));
    sb.AppendFormat("oauth_timestamp=\"{0}\",", EncodingPerRFC3986(timeStamp));
    sb.AppendFormat("oauth_consumer_key=\"{0}\",", EncodingPerRFC3986(consumerKey));
    if (!String.IsNullOrEmpty(token))
    {
        sb.AppendFormat("oauth_token=\"{0}\",", EncodingPerRFC3986(
    }
    sb.Append("oauth_signature_method=\"HMAC-SHA1\",");
    sb.AppendFormat("oauth_signature=\"{0}\"", EncodingPerRFC3986(signature));
    
    return sb.ToString();
    

    您可以只使用 Api 的底层,而不必担心生成的服务。请记住,此代码已被 http://www.apache.org/licenses/LICENSE-2.0 覆盖,因此在合法的降神会上,将 DLL 用于此特定功能而不是直接处理它可能更容易。

    【讨论】:

    • 我熟悉 Google API 的 .NET 库,但我想使用 httpRequest。因为它也适用于 twitter api,ans anthers rest api。我只需要知道将访问令牌发送到谷歌的语法。
    猜你喜欢
    • 2012-02-13
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2018-05-19
    • 2020-06-11
    • 2017-02-22
    相关资源
    最近更新 更多