C# 如何在UWP上实现Twitter的oauth2?

C# 如何在UWP上实现Twitter的oauth2?,c#,twitter,oauth,uwp,C#,Twitter,Oauth,Uwp,我想在UWP上开发一个小型twitter应用程序 获取oauth/authenticate 获取oauth/授权 POST oauth/access\u令牌 POST oauth/请求\u令牌 POST oauth2/invalidate_令牌 后oauth2/token 这是更多的信息。我很困惑。所以我想通过ComsumerKey、ComsumerKeySecret、回调Uri登录Twitter。并从api.twitter.com获取访问令牌以访问数据。 我认为我以前必须使用POST-oa

我想在UWP上开发一个小型twitter应用程序

  • 获取oauth/authenticate
  • 获取oauth/授权
  • POST oauth/access\u令牌
  • POST oauth/请求\u令牌
  • POST oauth2/invalidate_令牌
  • 后oauth2/token
这是更多的信息。我很困惑。所以我想通过ComsumerKey、ComsumerKeySecret、回调Uri登录Twitter。并从api.twitter.com获取访问令牌以访问数据。 我认为我以前必须使用POST-oauth2/token(它错了吗?)


公共异步任务GetAccessTokenBYAuthorizeTwitter()
{
//抛出新的NotImplementedException();
var client=新的HttpClient();
string postData=“授予\类型=客户\凭证”;
var request=wait client.PostAsync(ResourceUrl,newstringcontent(postData));
//请求头
client.DefaultRequestHeaders.Add(“Authorization”,string.Format(“Basic{0}”,Convert.ToBase64String(Encoding.UTF8.GetBytes(ComsumerKeyAndSecret)));
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“应用程序/json”);
return wait request.Content.ReadAsStringAsync();
}
示例:我尝试通过Vimeo登录并成功。

public async Task<string> AuthorizeWithVimeo()
    {
        var clientId = "b8e1bff5d5d1f2c90f61017b135960adb42f5fe2";

        var SpotifyUrl = "https://api.vimeo.com/oauth/authorize?client_id=" + Uri.EscapeDataString(clientId) + "&response_type=code&redirect_uri=" + Uri.EscapeDataString("https://example/callback") + "&state=xyzbc";
        var StartUri = new Uri(SpotifyUrl);
        var EndUri = new Uri("https://example/callback");

        WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, StartUri, EndUri);
        if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
        {
            var responseData = WebAuthenticationResult.ResponseData;

            //await GetSpotifyUserNameAsync(WebAuthenticationResult.ResponseData.ToString());
            return responseData;
        }
        else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
        {
            return $"HTTP Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseErrorDetail.ToString()}";
        }
        else
        {
            return $"Error returned by AuthenticateAsync() : {WebAuthenticationResult.ResponseStatus.ToString()}";
        }
    }
public异步任务AuthorizeWithVimeo()
{
var clientId=“b8e1bff5d5d1f2c90f61017b135960adb42f5fe2”;
var SpotifyUrl=”https://api.vimeo.com/oauth/authorize?client_id=“+Uri.EscapeDataString(clientId)+”&response\u type=code&redirect\u Uri=“+Uri.EscapeDataString(”https://example/callback“”+“&state=xyzbc”;
var StartUri=新Uri(SpotifyUrl);
var EndUri=新Uri(“https://example/callback");
WebAuthenticationResult WebAuthenticationResult=等待WebAuthenticationBroker.AuthenticationAsync(WebAuthenticationOptions.None、StartUri、EndUri);
如果(WebAuthenticationResult.ResponseStatus==WebAuthenticationStatus.Success)
{
var responseData=WebAuthenticationResult.responseData;
//等待GetSpotifyUserNameAsync(WebAuthenticationResult.ResponseData.ToString());
返回响应数据;
}
else if(WebAuthenticationResult.ResponseStatus==WebAuthenticationStatus.ErrorHttp)
{
return$“authenticateSync()返回的HTTP错误:{WebAuthenticationResult.ResponseErrorDetail.ToString()}”;
}
其他的
{
return$“authenticateSync()返回的错误:{WebAuthenticationResult.ResponseStatus.ToString()}”;
}
}
这应该行得通

var client = new HttpClient();

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic",
    Convert.ToBase64String(
        Encoding.ASCII.GetBytes(
            string.Format("{0}:{1}", Uri.EscapeDataString(oauth_consumer_key),
                          Uri.EscapeDataString(oauth_consumer_secret)))));

client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip");
client.DefaultRequestHeaders.TryAddWithoutValidation("Host", "api.twitter.com");

var content = new StringContent(postBody);
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response =await client.PostAsync(oauth_url, content);
response.EnsureSuccessStatusCode();

using (var responseStream = response.Content.ReadAsStreamAsync())
using (var decompressedStream = new GZipStream(responseStream.Result, CompressionMode.Decompress))
using (var streamReader = new StreamReader(decompressedStream))
{
var rawJWt = streamReader.ReadToEnd();
var jwt = JsonConvert.DeserializeObject(rawJWt);
}
这应该行得通

var client = new HttpClient();

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Basic",
    Convert.ToBase64String(
        Encoding.ASCII.GetBytes(
            string.Format("{0}:{1}", Uri.EscapeDataString(oauth_consumer_key),
                          Uri.EscapeDataString(oauth_consumer_secret)))));

client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip");
client.DefaultRequestHeaders.TryAddWithoutValidation("Host", "api.twitter.com");

var content = new StringContent(postBody);
content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
HttpResponseMessage response =await client.PostAsync(oauth_url, content);
response.EnsureSuccessStatusCode();

using (var responseStream = response.Content.ReadAsStreamAsync())
using (var decompressedStream = new GZipStream(responseStream.Result, CompressionMode.Decompress))
using (var streamReader = new StreamReader(decompressedStream))
{
var rawJWt = streamReader.ReadToEnd();
var jwt = JsonConvert.DeserializeObject(rawJWt);
}

您正在访问什么api?客户端特定数据或公共数据用户数据有不同的流首先,我需要登录并获取访问令牌…您正在访问什么api?客户端特定或公共数据用户数据有不同的流。首先,我需要登录并获取访问令牌,然后。。。