Получение ошибки с Instagram при попытке аутентификации

В универсальном приложении для Windows (UWP) я пытаюсь зарегистрировать пользователя в своей учетной записи Instagram, но безуспешно. Я продолжаю получать следующую ошибку после того, как пользователь вводит свои учетные данные и нажимает кнопку входа в систему:

Вот код, который используется:

var scopes = new List<OAuth.Scope>();
scopes.Add(InstaSharp.OAuth.Scope.Basic);

var link = InstaSharp.OAuth
                .AuthLink
                (
                    _config.OAuthUri + "authorize",
                    _config.ClientId,
                    _config.RedirectUri,
                    scopes,
                    InstaSharp.OAuth.ResponseType.Token
                );

var webAuthResult = await WebAuthenticationBroker
                                .AuthenticateAsync
                                (
                                    WebAuthenticationOptions.None,
                                    new Uri(link)
                                );

switch (webAuthResult.ResponseStatus)
{
    case WebAuthenticationStatus.Success:
        return true;

    case WebAuthenticationStatus.UserCancel:
        return false;

    case WebAuthenticationStatus.ErrorHttp:
        return false;

    default:
        return false;
}

Я делаю что-то неправильно??


ОБНОВЛЕНИЕ 1:


Вот быстрый пример UWP, который демонстрирует проблему:

UWP SAMPLE


ОБНОВЛЕНИЕ 2:


Я обнаружил проблему, которая вызвала ошибку "невозможно подключиться к сервису". Вот код, вызвавший проблему:

        _config = new InstagramConfig(clientIdTextBox.Text,
                                clientSecretTextBox.Text,
                                WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(),
                                WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString());

Мой третий параметр, URL-адрес перенаправления, - это не веб-адрес, а ссылка на приложение. Если бы я изменил это на простой URL-адрес, такой как www.instagram.com, то он работает, ОДНАКО браузер остается открытым на этом URL-адресе перенаправления.

Как сделать так, чтобы браузер перенаправлял обратно в мое приложение UWP, используя URL-адрес перенаправления???

3 ответа

Решение

Я нашел свою проблему!

В конце концов, мой URL-адрес перенаправления не полностью соответствовал URL-адресу, указанному в моей учетной записи разработчика Instragram, что и стало причиной проблемы.

ОБНОВИТЬ:

Несмотря на то, что я исправил свою проблему и правильно получил код доступа, похоже, что с Instragram возникает большая проблема, потому что я всегда получаю 400 неверных запросов. И из того, что я видел в Интернете от других разработчиков, это очень распространенная проблема. Я нахожусь в среде песочницы, интересно, это как-то связано с этим.

Какова последняя строка переменной ссылки, которую вы используете. Это должно быть похоже на приведенный ниже URL

https://instagram.com/oauth/authorize/?client_id={your_client_id} & redirect_uri = {your_redirect_url} & response_type = code

Если у вас есть значение параметра как часть URL-адреса перенаправления, вы должны добавить еще один =true как в приложении Instagram, так и в URL-адресе перенаправления, который вы отправляете из кода.

Затем вы должны перейти к шагу 2 процесса oauth после получения ответа от веб-сайта Instagram на вышеуказанный вызов.

Похоже, вы разрабатываете приложение Windows WPF. В этом случае я бы предложил создать веб-службу или службу WCF, а также поместить логику вызова API instagram и получения токена доступа из API instagram в веб-службу и разместить службу на сервере. Затем вы можете указать веб-адрес сервиса в приложении Instagram в качестве действующего URl. Если у вас есть IP-адрес сервера, это нормально. Если вы используете хостинг в локальном IIS, попробуйте подключить локальный хост к Интернету.

У меня нет кода для приложения Windows WPF. Ниже приведен код, который я использую для моего C# WEB API, который использует Instagram OAuth2. Вы можете перевести это на ваш случай.

Метод 1:- Первый шаг Oauth

private void MakeRequestForToken()
{
    string instagramIntialRedirectUrl = "https://instagram.com/oauth/authorize/?client_id={yourclientid}&redirect_uri={Should  be a valid URL that can be accessed by instagram}&response_type=code"
    Response.Redirect(instagramUrl);
}

Метод 2:- Второй шаг Oauth(URL перенаправления должен быть задан таким образом, чтобы ответ, направленный на URL перенаправления из Instagram, достиг этого метода)

private void HandleAuthorizeTokenResponse()
{
    var request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/oauth/access_token");
    var postData = "client_id=" + AppKey + "&client_secret=" + AppSecret + "&grant_type=authorization_code&code=" + Code + "&redirect_uri=" + RedirectUrl;
    var data = Encoding.ASCII.GetBytes(postData);
    request.Method = "POST";
    request.ContentType = "application/json; charset=utf-8";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var reader = new StreamReader(response.GetResponseStream());
    string objText = reader.ReadToEnd();
}

Надеюсь это поможет!

Другие вопросы по тегам