更新:
也许只是我不了解 oAuth 的工作原理?我尝试在http://www.apikitchen.com上手动运行查询,但那里也出现 400 错误!可以肯定的是,我在这里正确构建了 URL 吗?
发布网址:
https://api.bufferapp.com/1/oauth2/token.json?client_id=[hidden]&client_secret=[hidden]&redirect_uri=http://apps.joel-murphy.com/buffer/code/success.php&code= [ 我从缓冲区获取的访问码以 1/ 开头]&grant_type=authorization_code
原帖:
我正在构建一个需要使用网站数据的 Windows Phone 应用程序。该网站使用 oAuth 对用户进行身份验证。
我使用内置的 Web 浏览器控件发出 GET 请求来验证用户身份。官方文档要求 URL 结构是这样的:
获取https://bufferapp.com/oauth2/authorize?client_id=...& redirect_uri=...& response_type=code
我的应用程序的这一部分有效。尽管在将授权令牌交换为来自服务器的访问令牌时,我遇到了问题。官方文档要求 URL 结构是这样的:
发布https://api.bufferapp.com/1/oauth2/token.json?client_id=...& client_secret=...& redirect_uri=...& code=...& grant_type=authorization_code
如果我错了,请纠正我,但据我所知,除非提交表单,否则无法从浏览器发出 POST 请求。为此,我决定使用WebClient
该类向服务器提交数据。但是,无论我是在实际设备上还是在 Visual Studio 模拟器上运行我的代码,我总是会收到以下错误:
远程服务器返回错误:NotFound
有谁知道以下代码有什么问题?我在 2 天内花了 5 个多小时试图解决此错误,但似乎没有任何效果。
我正在使用的代码:
WebClient wc = new WebClient();
wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc_UploadStringCompleted);
wc.UploadStringAsync(new Uri(access_token_url), "POST", GetPostParameters());
void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
try
{
MessageBox.Show(e.Result);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
string GetPostParameters()
{
string data = "";
data += "client_id="+client_id + "&";
data += "client_secret=" +client_secret + "&";
data += "redirect_uri=" + redirect_uri+ "&";
data += "code=" + App.AccessToken + "&";
data += "grant_type=authorization_code";
return data;
}
有谁知道出了什么问题?这让我发疯了,当 oauth 是当今如此使用的技术时,它必须如此复杂,这真是太可惜了。
提前致谢。