Битовый неверный логин при доступе с веб-сайта Azure

Я разработал веб-приложение ASP.NET MVC, которое обращается к bit.ly для сокращения URL. Я использовал библиотеку.NET NuGet Bitly.Net, как это упоминалось в справочнике по Bit.ly.

Все отлично работало на моей локальной машине, как в модульных тестах, так и при локальном запуске веб-приложения. Однако когда я развернул его в Azure, это не удалось. К сожалению, Bitly.Net не дал полезной обратной связи об ошибках, но, как показал этот SO-ответ, легко написать свою собственную, так что я сделал.

Теперь при вызове команды сокращений я получаю код ошибки 500, а текст ошибки говорит: "НЕВЕРНЫЙ ВХОД".

Я использую устаревший метод аутентификации, но, глядя на документацию о сокращении, он говорит, что я могу использовать этот метод аутентификации, и он работает локально, так что это не так. Я мог бы переключиться на новую аутентификацию OAuth, но думаю, что у меня возникла бы та же проблема.

Кто-нибудь получал доступ к bit.ly API из Azure? Может ли CORS быть проблемой? Любые предложения с благодарностью принимаются.

1 ответ

Решение

Хорошо, я на самом деле написал поддержку api bit.ly (api@bitly.com), и они любезно вернулись и сказали:

Ошибка INVALID_LOGIN указывает на то, что вы указали неверный логин или неправильный параметр apiKey.

Что было странно, я проверил параметры 'login' и 'apiKey', зарегистрировав их и загрузив web.config из Azure. Однако специалист службы поддержки bit.ly предложил использовать фиксированный токен OAuth (подробнее об этом см. Верхнюю строку, выделенную жирным шрифтом на связанной странице).

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

На случай, если это кому-нибудь пригодится, приведем код, основанный на реализации @devfunkd, но обновленный до:

  • Используйте фиксированный токен OAuth для проверки.
  • Используйте API-интерфейс bit.ly V3, который имеет более приятный формат json.
  • Он использует Json.NET JSON Deserialiser.
  • Я сделал это асинхронно.

Обратите внимание, что в коде поле _bitlyToken должен содержать токен, созданный при переходе на эту страницу. _logger переменная содержит регистратор, так что ошибки регистрируются.

public async Task<string> ShortenAsync(string longUrl)
{
    //with thanks to @devfunkd - see https://stackru.com/questions/31487902/nuget-package-for-bitly-to-shorten-the-links

    var url = string.Format("https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}",
            _bitlyToken, HttpUtility.UrlEncode(longUrl));

    var request = (HttpWebRequest) WebRequest.Create(url);
    try
    {
        var response = await request.GetResponseAsync();
        using (var responseStream = response.GetResponseStream())
        {
            var reader = new StreamReader(responseStream, Encoding.UTF8);
            var jsonResponse = JObject.Parse(await reader.ReadToEndAsync());
            var statusCode = jsonResponse["status_code"].Value<int>();
            if (statusCode == (int) HttpStatusCode.OK)
                return jsonResponse["data"]["url"].Value<string>();

            //else some sort of problem
            _logger.ErrorFormat("Bitly request returned error code {0}, status text '{1}' on longUrl = {2}",
                statusCode, jsonResponse["status_txt"].Value<string>(), longUrl);
            //What to do if it goes wrong? I return the original long url
            return longUrl;
        }
    }
    catch (WebException ex)
    {
        var errorResponse = ex.Response;
        using (var responseStream = errorResponse.GetResponseStream())
        {
            var reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
            var errorText = reader.ReadToEnd();
            // log errorText
            _logger.ErrorFormat("Bitly access threw an exception {0} on url {1}. Content = {2}", ex.Message, url, errorText);
        }
        //What to do if it goes wrong? I return the original long url
        return longUrl;
    }
}

Я надеюсь, что это помогает кому-то.

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