API облачного маркетинга Salesforce не возвращает токен доступа / авторизации

У меня есть приложение, которое запрашивает у маркетингового облака токен доступа для использования в последующих запросах доступа к API. Это было разработано в прошлом году и отлично работало до прошлой недели. Тот же запрос не выполняется с 22.02. Вот пример кода для запроса токена:

public static async Task<string> GetAuthorizationToken(string ClientId, string ClientSecret)
    {
        string strAuthorizationToken = string.Empty;
        HttpClient client = new HttpClient();

        var dictParams = new Dictionary<string, string>()
        {
            { "clientId", ClientId }, {"clientSecret", ClientSecret }
        };
        var content = new FormUrlEncodedContent(dictParams);

        var response = await client.PostAsync("https://auth.exacttargetapis.com/v1/requestToken", content);
        if (response.IsSuccessStatusCode)
        {
            var strresponse = await response.Content.ReadAsStringAsync();
            //dynamic objResult = JsonConvert.DeserializeObject<dynamic>(strresponse);
            //strAuthorizationToken = objResult.accessToken;
        }

        return strAuthorizationToken;
    }

GetAuthorizationToken("*********", "*******").GetAwaiter().GetResult();

Вот ошибка, которую я получаю от API:

{StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  X-Mashery-Responder: 02-26
  Vary: Origin
  X-Mashery-Message-ID: f4cec199-2e7e-49e2-88e0-6673ffe849ed
  strict-transport-security: max-age=15552000; preload
  Content-Security-Policy: upgrade-insecure-requests
  x-xss-protection: 1; mode=block
  x-frame-options: DENY
  x-content-type-options: nosniff
  Referrer-Policy: strict-origin-when-cross-origin
  Connection: close
  Cache-Control: no-store, must-revalidate, no-cache, max-age=0, private
  Date: Tue, 26 Feb 2019 16:42:29 GMT
  Server: Apache
  Content-Length: 223
  Content-Type: application/json; charset=UTF-8
}}

Мне нужно знать, что было изменено или что мне нужно исправить в этом коде, чтобы снова получить доступ к API. Пожалуйста, помогите, как я могу снова заставить эту работу работать. Заранее спасибо.


person Meenakshi Dash    schedule 26.02.2019    source источник
comment
Значит, в вашем коде ничего не изменилось с тех пор, как это было впервые реализовано? Может быть, они перестали поддерживать версию TLS, которую использует ваше приложение, скажем, им требуется TLS 1.2, а ваше приложение поддерживает только TLS 1.0 и 1.1?   -  person David Yenglin    schedule 26.02.2019
comment
Обратите внимание на изменения в API-интерфейсе salesforce, похоже, они меняют его help. salesforce.com/   -  person Cleptus    schedule 26.02.2019
comment
С самого начала никаких изменений кода не происходило. Это простой веб-HTTP-запрос на URL-адрес авторизации в маркетинговом облаке. Он работает в почтальоне, когда я передаю clientId и secret как Json. Поэтому я обновил код, чтобы передать содержимое Json. var content = new StringContent(strContent, Encoding.UTF8, "application/json"); Когда я выполняю код, он все равно не работает.   -  person Meenakshi Dash    schedule 26.02.2019
comment
Я бы определенно проверил, сделали ли они мошенническое обновление, требующее TLS 1.2, и ваше приложение не поддерживает его, где почтальон может быть настроен для его поддержки.   -  person David Yenglin    schedule 26.02.2019
comment
@DavidYenglin Спасибо, Дэвид. Это помогает.   -  person Meenakshi Dash    schedule 27.02.2019


Ответы (1)


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

Мне пришлось добавить следующую строку кода, чтобы указать используемый протокол безопасности:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls;
person Meenakshi Dash    schedule 27.02.2019