Параметры ответа аутентификации Facebook неверны -> бесконечный цикл запроса - PullRequest
1 голос
/ 08 января 2012

Я новичок в Facebook API и после некоторой работы я столкнулся с проблемой. Во-первых, я использую SDK facebook для связи с API Facebook.

В настройках моего приложения я выбрал ответ на диалог OAuth в виде строки запроса, а не фрагмента URI.

enter image description here

На моем сервере я получил следующий код:

void Page_Load()
{
    string url = Request.Url.AbsoluteUri;
    Facebook.FacebookOAuthResult result = null;        
    if (!Facebook.FacebookOAuthResult.TryParse(url, out result))
    {
        string redirectUrl = PivotServer.Helpers.GetFacebookOAuthUrl();
        Response.Redirect(redirectUrl);
    }
}

И это мой вспомогательный метод:

    public static string GetFacebookOAuthUrl()
    {
        FacebookOAuthClient oauth = new FacebookOAuthClient
        {
            AppId = "149637255147166",
            AppSecret = "xxx",
            RedirectUri = new Uri("http://mydomain.com/")
        };

        var param = new Dictionary<string, object>
        {
            { "response_type", "token" },
            { "display", "popup" }
        };

        Uri url = oauth.GetLoginUrl(param);

        return url.AbsoluteUri;
    }

Я запустил свою страницу на веб-сервере (IIS). Когда я открываю страницу в первый раз, меня просят войти в facebook, что нормально, но затем я столкнулся с бесконечным циклом, потому что параметр Auth Token (из facebook) вместо этого представляет собой фрагмент URI, если строка запроса (которая Я хотел (см. Рисунок выше)). URI ответа выглядит как

http://mydomain.com/#access_token=AAACIGCNwLp4BAMccSoliF5EMGJm0NPldv5GpmBPIm9z7rRuSkiia7BM0uhEn1V88c8uOlWOfGc3C8sFC9tq90Ma0OwIm0tWLNU5BBAZDZD&expires_in=0&base_domain=mydomain.com

вместо

http://mydomain.com/?code=AAACIGCNwLp4BAMccSoliF5EMGJm0NPldv5GpmBPIm9z7rRuSkiia7BM0uhEn1V88c8uOlWOfGc3C8sFC9tq90Ma0OwIm0tWLNU5BBAZDZD&expires_in=0&base_domain=mydomain.com

Это ошибка в API-интерфейсе OAuth или что я здесь делаю очень неправильно?

Ответы [ 2 ]

1 голос
/ 21 июля 2012

Это было слишком просто:

var param = new Dictionary<string, object>
{
    { "response_type", "code" }, // <--- "code" instead of "token"
    { "display", "popup" }
};
1 голос
/ 09 января 2012

Это проблема с IE.Убедитесь, что в каждом ответе вашего сервера есть заголовок p3p.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...