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

#c# #uwp #instagram #instagram-api #instasharp

#c# #uwp #Instagram #instagram-api #instasharp

Вопрос:

В универсальном приложении 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


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


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

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

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

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

Ответ №1:

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

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

Обновить:

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

Ответ №2:

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

https://instagram.com/oauth/authorize/?client_id ={your_client_id}amp;redirect_uri={your_redirect_url}amp;response_type=код

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

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

Комментарии:

1. Это моя ссылка: <a rel="nofollow noreferrer noopener" href="https://api.instagram.com/oauth/authorize?client_id=amp;redirect_uri=ms-app://s-1-15-2-1005028906-2239310109-3402011355-130426970-480924263-3476788055-3018980986/amp;response_type=tokenamp;scope=basic» rel=»nofollow noreferrer»> api.instagram.com/oauth /…

2. Я добавил пример приложения в свой пост.

Ответ №3:

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

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

Способ 1: — Первый шаг Oauth

 private void MakeRequestForToken()
{
    string instagramIntialRedirectUrl = "https://instagram.com/oauth/authorize/?client_id={yourclientid}amp;redirect_uri={Should  be a valid URL that can be accessed by instagram}amp;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   "amp;client_secret="   AppSecret   "amp;grant_type=authorization_codeamp;code="   Code   "amp;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();
}
  

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

Комментарии:

1. Спасибо за ответ, я попробую ваш код, но я пишу приложение UWP, а не WPF, создание веб-сервиса выходит за рамки, но я попробую по-вашему.