ошибка при попытке получить токен доступа из stackexchange API 2.0, если пользователь не вошел в систему

Вот моя проблема: я пытаюсь получить URL-адрес профиля текущего пользователя в stackoverflow с помощью API stackexchange 2.0. Если пользователь вошел в систему, все работает нормально, поток 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 неверный запрос. Я просмотрел документацию по api stackexchange, и там сказано только, что это плохой параметр. Но я использую те же параметры, когда делаю это для пользователя, который уже вошел в систему, и это работает.

Я много искал, но не нашел ничего похожего на эту проблему. Любая помощь будет оценена по достоинству!

(Я использую структуру mvc 3 с Visual Studio 2010, если это полезно)


person zolipapa    schedule 27.03.2012    source источник


Ответы (2)


После того, как вы получите КОД на одной из своих страниц (URL-адрес, который вы указали для redirect_uri для запроса кода), создайте одну форму, как показано ниже

<?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 вы должны указать тот же redirect_uri, который вы использовали для запроса CODE.

person Amit Parmar    schedule 10.08.2013

Проверьте заголовок Content-Type = application / x-www-form-urlencoded в окончательном запросе POST.

Это требуется согласно документации.

person Sanjiv    schedule 01.06.2014