加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Google Contacts API – 获取访问令牌(oauth)后

发布时间:2020-12-15 21:29:32 所属栏目:百科 来源:网络整理
导读:我设法为谷歌的联系人API获取访问令牌,但当我尝试拨打电话以检索登录用户的个人资料时,我收到401未经授权的错误… 我做了一些研究,并按照“各种”谷歌文档中提到的步骤(如this one和this one以及许多其他文档)但没有用… 到目前为止,我认为我正在签署错误的
我设法为谷歌的联系人API获取访问令牌,但当我尝试拨打电话以检索登录用户的个人资料时,我收到401未经授权的错误…

我做了一些研究,并按照“各种”谷歌文档中提到的步骤(如this one和this one以及许多其他文档)但没有用…

到目前为止,我认为我正在签署错误的请求.这是我获得访问令牌后正在做的事情.

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()发送请求时出现401错误(上面代码的最后一行)

我只需要摆脱401错误……我正在使用ASP.NET / C#.任何帮助,将不胜感激.谢谢…

解决方法

您的代码示例定义了未使用的reqURL,并使用未定义的url.

您通常会使用授权标头而不是查询字符串提供OAuth请求参数.

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

我会想象签署请求并设置授权,这是在OAuth对象中处理的内容.

澄清

我使用这样的方法在我的OAuth 1.0a实现中签署http请求:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读