Сложность с SendAsync HttpPost с заголовком и телом - PullRequest
0 голосов
/ 26 июня 2019

Не удается получить ответ 200 от SendAsync для HttpPost.Это для многофазной аутентификации с использованием токена базовой аутентификации для получения токена носителя, который затем используется для получения accessKeyId и accessKeySecret, который затем используется для получения доступного accessToken.

Это формат, которыйожидается (предоставлено продавцом).Я полагаю, что код, который я написал, правильно обрабатывает данные заголовка, но я не уверен насчет тела.При тестировании с Restlet или Postman тело должно быть введено точно так, как показано.Я думаю, что когда цитируемый тег и значение помещаются в C #, кавычки теряются в переводе;см. код ниже этого раздела.

************************* От Продавца *****************************
Теперь с помощью токена на предъявителя можно создать ключ доступа с помощью конечной точки
https://xxxxxxxxxxxx/x-keys`
a.POST Запрос:
я.Заголовок:
1. Авторизация: носитель eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9….
2. Тип содержимого: application / json
ii.Тело:
1. {
2. "userId": "xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx",
3. "tenantId": "xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxx"
4.}

>String newBearerToken = "bearer " + bearerToken;

>var cl = new HttpClient();
>cl.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
>cl.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", newBearerToken);

>var nvc = new List<KeyValuePair<string, string>>();
>nvc.Add(new KeyValuePair<string, string>("\"" + "userId" + "\"", "\"" +   "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "\""));
>nvc.Add(new KeyValuePair<string, string>("\"" + "tenantId" + "\"", "\"" + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + "\""));

>var req = new HttpRequestMessage(HttpMethod.Post, "https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/-keys") { Content = new FormUrlEncodedContent(nvc) };
>var result = await cl.SendAsync(req);

Я ожидаю тело ответа с новыми токенами доступа и HttpResponse 200, но это то, что возвращается:

"result {StatusCode: 302, ReasonPhrase: '', Версия: 1.1, Content: System.Net.Http.StreamContent, Заголовки: {Content-Security-Policy: default-src https: data: 'unsafe-inline' 'unsafe-eval';connect-src .... "

1 Ответ

0 голосов
/ 26 июня 2019

Заголовок аутентификации должен быть следующим ...

new AuthenticationHeaderValue("Bearer", newBearerToken);

, а не "Авторизация", если вы используете токены на предъявителя

Ваша текущая реализация выполняет следующее

Авторизация: Авторизация на предъявителя eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9

Снять носитель с токена тоже

String newBearerToken = bearerToken;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...