У меня есть код, который я пытаюсь (по моему мнению) упростить, чтобы получить токен OAuth для запроса веб-API.
Я тестировал этот процесс в PostMan, первоначально устанавливая запрос токена аутентификации как часть вкладки «авторизация» основного запроса. Это прекрасно работает. Если я установлю запрос токена аутентификации как отдельный объект в PostMan, это тоже будет отлично работать.
Однако в C# он никогда не отвечает. У меня есть другой код, в котором тот же запрос работает нормально (другой сервис и т. д., но расположение кода такое же).
Код C#:
public static async Task GetAccessTokenAsync() { пытаться { используя (var client = новый HttpClient()) { client.BaseAddress = новый Uri(AuthTokenUrl); var request = новый FormUrlEncodedContent (новый словарь { ["grant_type"] = "client_credentials", ["client_id"] = AuthClientId, ["client_secret"] = AuthClientSecret, ["область"] = область аутентификации }); var resp = await client.PostAsync("", запрос); если (соответственно IsSuccessStatusCode) { var content = await resp.Content.ReadAsAsync(); вернуть контент.access_token; } Log.Error("Запрос токена API не удался. Код состояния: {code}; Причина: {reason}, {@request}", resp.StatusCode, resp.ReasonPhrase, request); вернуть ноль; } } поймать (Исключение ex) { Log.Error(например, «Ошибка при получении токена аутентификации для API.»); вернуть ноль; } } Почтальон:

Рабочий пример C#:
public static async System.Threading.Tasks.Task GetOktaToken() { используя (var oktaClient = новый HttpClient()) { oktaClient.BaseAddress = новый Uri(AuthUrl); вар содержимое = новый FormUrlEncodedContent (новый [] { новая KeyValuePair("grant_type", "client_credentials") , new KeyValuePair("scope", "scope.read") , новая KeyValuePair("client_id", ClientId) , new KeyValuePair("client_secret", ClientSecret) }); var resp = ждут oktaClient.PostAsync(string.Empty, content); var oktaresp = await resp.Content.ReadAsAsync(); вернуть oktaresp.access_token; } }
Мобильная версия