繁体   English   中英

Twitter OAuth2-使用WinRT

[英]Twitter OAuth2 - using WinRT

我有以下代码:

        var oAuthConsumerKey = key;
        var oAuthConsumerSecret = secret;
        var oAuthUri = new Uri("https://api.twitter.com/oauth2/token");

        // Do the Authenticate
        var authHeaderFormat = "Basic {0}";

        var authHeader = string.Format(authHeaderFormat,
            Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" +
            Uri.EscapeDataString((oAuthConsumerSecret)))
        ));

        var postBody = "grant_type=client_credentials";
        //"application/x-www-form-urlencoded;charset=UTF-8"

        var req = new HttpClient();
        req.DefaultRequestHeaders.Add("Authorization", authHeader);

        var c = Convert.ToBase64String(Encoding.UTF8.GetBytes(postBody));
        IHttpContent content = new HttpStringContent(c, Windows.Storage.Streams.UnicodeEncoding.Utf8);

        HttpResponseMessage response = await req.PostAsync(oAuthUri, content);

        IHttpContent responseContent = response.Content;

        using (responseContent)
        {
            var data = await responseContent.ReadAsStringAsync();

我在上面指示的行上得到的错误是这样的:

response.Content = {"errors":  [{"code":170,"label":"forbidden_missing_parameter","message":"Missing required parameter: grant_type"}]}

因此,我的问题是:如何指定“授权类型”参数?

编辑:

按照下面@Jon的建议,我尝试将Grant_type添加到“内容”的构造函数中,但没有区别。

这就是我为其他几个云服务执行的操作。 我从未尝试过Twitter,但是只要授权标头正确,它就应该起作用:

    async Task<HttpResponseMessage> GetToken(string key, string secret)
    {
        var oAuthConsumerKey = key;
        var oAuthConsumerSecret = secret;
        var oAuthUri = new Uri("https://api.twitter.com/oauth2/token");

        HttpClient httpClient = new HttpClient();
        var authHeader = string.Format("Basic {0}",
        Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" +
        Uri.EscapeDataString(oAuthConsumerSecret))));
        httpClient.DefaultRequestHeaders.Add("Authorization", authHeader);

        HttpRequestMessage msg = new HttpRequestMessage(new HttpMethod("POST"), new Uri("https://api.twitter.com/oauth2/token"));
        msg.Content = new StringContent("grant_type=client_credentials");
        msg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");

        HttpResponseMessage response = await httpClient.SendAsync(msg);
        return response;
    }

您是否尝试使用引号设置值?

var postBody = "grant_type=\"client_credentials\"";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM