2

这是我的问题:我正在尝试使用 stackexchange 2.0 API 在 stackoverflow 上获取当前用户的个人资料 url。如果用户已登录,则一切正常,OAuth 流程为我提供访问令牌,我可以获得所需的所有信息。但是,如果用户未登录,stackexchange 会要求用户使用任何身份验证方法(google、facebook、yahoo 等)登录,但在用户登录后(让我们说用 google)我得到的响应是一个糟糕的要求。

我对授权码的第一个请求如下所示:

https://stackexchange.com/oauth?client_id=193&scope=read_inbox&redirect_uri=https%3a%2f%2fdioslaska.homelinux.org%2fcards%2fcard%2feditcards

在此之后,它返回 url 中的代码,我想用一个访问令牌交换它,并带有这样的 Post 请求:

https://stackexchange.com/oauth/access_token?client_id=193&redirect_uri=https%3a%2f%2fdioslaska.homelinux.org%2fcards%2fcard%2feditcards&client_secret= {我的客户端密码}&code=tCEeEFp1UX2GYilnjR2GcA))

响应是错误 400 错误请求。我查看了 stackexchange api 文档,它只说它是一个错误的参数。但是当我为已经登录的用户执行此操作时,我使用相同的参数,并且它可以工作。

我进行了很多搜索,但找不到与此问题类似的任何内容。任何帮助,将不胜感激!!

(如果有帮助,我将 mvc 3 框架与 Visual Studio 2010 一起使用)

4

2 回答 2

0

在您的一个页面上获得 CODE 后(您为 redirect_uri 提供的用于代码请求的 URL),制作如下表格

<?php
if(isset($_GET['code']))
{
?> 
<form method="POST" action="https://stackexchange.com/oauth/access_token" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="client_secret" value="asdhfbakjhsdfbjsd" />
    <input type="hidden" name="code" value="<?php echo $_GET['code'];?>" />
    <input type="hidden" name="client_id" value="1234" />
    <input type="hidden" name="redirect_uri" value="http%3A%2F%2Fmysite.com%2Fmypage.php" />
    <input type="submit" name="submit" value="stack" />
</form>
<?php
}
?>

您将在 stackexchange 页面之一上获得访问令牌,请注意,要获得 ACCESS_TOKEN,您必须提供与 CODE 请求相同的 redirect_uri。

于 2013-08-10T06:12:48.343 回答
0

检查最终 POST 请求中的标头 Content-Type = application/x-www-form-urlencoded

根据文档,这是必需的。

于 2014-06-01T06:55:06.220 回答