谷歌联系人API - 获得访问令牌后(的OAuth) [英] Google Contacts API - After getting the access token (oauth)

查看:221
本文介绍了谷歌联系人API - 获得访问令牌后(的OAuth)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设法得到谷歌的联系人API的访问令牌,但是当我尝试拨打电话,以获取登录的用户的个人资料,我得到一个401错误未经授权...

I managed to get the access token for google's contacts API but when i try to make a call to retrieve the logged in user's profile, i get a 401 unauthorized error...

我做了一些研究,并遵循各种各样的谷歌单证(如的这个这个以及其他许多),但没有用...

I did some research and followed the steps mentioned in "various" google documentations ( like this one and this one and many others) but with no use...

到目前为止,我觉得我签约的要求是错误的。下面是我在做什么后,我获得访问令牌。

So far i think i'm signing the request wrong. Here's what i'm doing after i get the access token.

string outUrl,querystring;
string sig = oAuth.GenerateSignature(new Uri("https://www.google.com/m8/feeds/contacts/default/full"), Server.UrlEncode(oAuth.ConsumerKey), oAuth.ConsumerSecret, oAuth.Token, null, "GET", timeStamp, nonce, out outUrl, out querystring);
string reqURL = "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + oAuth.Token + "&oauth_signature_method=HMAC-SHA1&oauth_signature=" + Server.UrlEncode(sig) + "&oauth_consumer_key=" + oAuth.ConsumerKey + "&oauth_timestamp=" + timeStamp + "&oauth_nonce=" + nonce + "&oauth_version=1.0";
response = oAuth.WebRequest(oAuthGoogle.Method.GET, reqURL, String.Empty);

发送使用oAuth.WebRequest()(高于code的最后一行)请求时出现401错误

The 401 error appears when send the request using oAuth.WebRequest() (the last line of the code above)

我只需要摆脱401错误的...我使用ASP.NET/C#。任何帮助将是AP preciated。谢谢...

I just need to get rid of the 401 error...I'm using ASP.NET/C#. Any help would be appreciated. Thank you...

推荐答案

您code例子定义 reqURL 未使用,使用网址这是不确定的。

Your code example defines reqURL which is not used and uses url which is not defined.

您通常会提供的OAuth请求参数与授权头,而不是查询字符串。

You would normally provide OAuth request parameters with the authorization header rather than the querystring.

http://oauth.net/core/1.0/#auth_header_authorization

我会想象签署请求,并设定授权,这是东西是被你的OAuth对象内部处理。

I would imagine signing the request and setting the Authorization this is something that's being handled inside your OAuth object.

为了澄清

我用的方法是这样登录我的OAuth 1.0a中实现的HTTP请求:

I have used a method like this to sign http requests in my OAuth 1.0a implementation:

    /// <summary>
    /// Gets the authorization header.
    /// </summary>
    /// <param name="method">The method.</param>
    /// <param name="url">The URL of the request.</param>
    /// <param name="parameters">The parameters.</param>
    /// <returns>Authorization header</returns>
    public string GetAuthorizationHeader(string method, Uri url, NameValueCollection parameters)
    {
        parameters.Set("oauth_consumer_key", this.ConsumerKey);
        parameters.Set("oauth_nonce", this.GetNonce());
        parameters.Set("oauth_timestamp", this.GetTimeStamp());
        parameters.Set("oauth_version", "1.0");
        parameters.Set("oauth_signature_method", "HMAC-SHA1");

        string signString = this.GetSignString(method, url, parameters);
        string signature = this.GetSignature(signString, this.ConsumerSecret, this.tokenSecret);

        parameters.Set("oauth_signature", signature);

        StringBuilder authorizationHeader = new StringBuilder();
        foreach (string paramKey in parameters.AllKeys)
        {
            if (authorizationHeader.Length > 0)
            {
                authorizationHeader.Append(", ");
            }
            else
            {
                authorizationHeader.Append("OAuth ");
            }

            authorizationHeader.AppendFormat("{0}=\"{1}\"", paramKey, OAuthHelper.UrlEncode(parameters[paramKey]));
        }

        return authorizationHeader.ToString();
    }

我用这样的

    public void SignHttpWebRequest(string token, string tokenSecret, ref HttpWebRequest request)
    {
        NameValueCollection parameters = new NameValueCollection();
        this.tokenSecret = tokenSecret;
        parameters.Set("oauth_token", token);
        request.Headers.Add("Authorization", this.GetAuthorizationHeader(request, parameters));
    }

这篇关于谷歌联系人API - 获得访问令牌后(的OAuth)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆