401未经授权使用谷歌任务

时间:2011-12-17 19:42:00

标签: c# oauth httpwebrequest google-api

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

我成功获得了访问权。

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

在google任务文档中写道,我需要通过HTTP Authorization标头发送Access令牌,但我不知道如何 link

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

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

 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);

1 个答案:

答案 0 :(得分:0)

有一个Google发布.Net library用于访问Google Api,其中包括用于执行身份验证的帮助程序我建议使用此Api并从samples项目发布者(包括Task Api Sample开始})。

如果您想随身携带Api通话,您可以使用communications library,或查看source code,了解Google如何进行通信。

修改

在上面链接的来源中,您可以找到OAuth Authenticator,其中添加了http {header} System.Net.HttpRequestHeader.Authorization OAuthUtil.GenerateHeader中指定的值。相关部分复制如下。

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可能更容易,而不是直接处理它。