Получение ошибки с 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, который демонстрирует проблему:
ОБНОВЛЕНИЕ 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();
}
Надеюсь это поможет!