HttpWebRequest с аутентификацией JWT всегда отвечает 401 несанкционированным - PullRequest
0 голосов
/ 26 февраля 2020

Я разрабатываю веб-сервис на ASP. NET Core 3.1, который использует аутентификацию JWT и авторизацию для безопасности. Я тестировал его с помощью Postman и Javascript (ax ios), и все, кажется, работает отлично. Но теперь мне нужно обновить приложение. NET 4.6.2 для доступа к этому веб-сервису, но каким-то образом оно всегда отвечает с кодом состояния 401 «неавторизованным», и я просто не понимаю, почему.

Самая простая версия клиента показано ниже:

            var request = WebRequest.CreateHttp(@"http://localhost:49767/Information/TestAuthentication");
            request.Headers.Add(HttpRequestHeader.Authorization, "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts");

            request.Method = "GET";


            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode != HttpStatusCode.OK)
                throw new Exception(response.StatusDescription);

Когда я пытаюсь выполнить тот же самый простой c звонок от Почтальона, он отвечает чистым кодом status200.

postman version

Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Хм, поэтому проблема вызвана кодом сервера app.UseHttpsRedirection();

Видимо, перенаправление https очищает заголовок "авторизации"

Я могу получить работающее приложение, используя URI из простой анонимный запрос.

var request = WebRequest.CreateHttp(@"http://localhost:49767/Information");
var response = request.GetResponse() as HttpWebResponse;

var uri = new Uri(response.ResponseUri, "/Information/TestAuthentication");
request = WebRequest.CreateHttp(uri);

Но мне кажется странным, что это было так трудно найти!

0 голосов
/ 26 февраля 2020

В Почтальоне вы отправляете обычную пару значений ключа заголовка со значением ключа Авторизация, значение которого является токеном на предъявителя. Однако в своем коде вы отправляете его через заголовок авторизации.

Попробуйте отправить его как обычный заголовок с парой ключ-значение, например: request.Headers.Add("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts");

Если вы хотите отправить через заголовок авторизации, вы также можете попробовать request.Headers[HttpRequestHeader.Authorization] = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts";

...