谷歌OAuth2错误请求

本文关键字:请求 错误 OAuth2 谷歌 | 更新日期: 2023-09-27 18:07:20

我正试图为windows phone编写一个YouTube应用程序,我偶然发现了一些身份验证方面的问题。由于某些原因,下面的代码不能正常工作,

string url = "https://accounts.google.com/o/oauth2/token?";
string postData = "code=" + str + "&client_id=*********.apps.googleusercontent.com&client_secret=*******&grant_type=authorization_code";

HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(url);              
byte[] data = Encoding.Unicode.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";                
using (Stream stream =await httpWReq.GetRequestStreamAsync())
    stream.Write(data, 0, data.Length);
HttpWebResponse response =(HttpWebResponse)(await httpWReq.GetResponseAsync());
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

我对HttpWebRequest相当陌生,所以可能我错过了一些东西,尽管我得到了回应:

错误请求

具体来说,它说grant_type缺失,虽然我很确定它不是,我根据文档做了一切。我哪里做错了?

谷歌OAuth2错误请求

这可能会修复它

            parameters.Append("code=" + str);
            parameters.Append("&client_id=*****.apps.googleusercontent.com");
            parameters.Append("&client_secret=*****");
            parameters.Append("&redirect_uri=urn:ietf:wg:oauth:2.0:oob:auto");
            parameters.Append("&grant_type=authorization_code");
            string p_params = parameters.ToString();
            byte[] p_data_params = Encoding.UTF8.GetBytes(p_params);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");
            request.Accept = "application/json";
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            Stream dataStream = await request.GetRequestStreamAsync();
            dataStream.Write(p_data_params, 0, p_data_params.Length);
            dataStream.Dispose();
            HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
            Stream responseStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(responseStream, Encoding.UTF8);
            string result = readStream.ReadToEnd();