我正在ASP.NET Core 3.1中开发一个Web服务,该服务使用JWT身份验证和授权来确保安全。我已经使用Postman和Javascript(axios)对其进行了测试,并且一切似乎都很好。但是现在我必须更新.NET 4.6.2应用程序才能访问此Web服务,但是无论如何它总是以状态码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);
[当我尝试使用邮递员的完全相同的简单呼叫时,它会返回一个干净的status200代码。
有人知道我在做什么错吗?
在邮递员中,您将发送具有键值授权的常规标头键值对,该值是Bearer令牌。但是,在您的代码中,您将其作为授权标头发送。
[尝试将其作为具有键值对的常规标头发送,如下所示:request.Headers.Add("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts");
如果您想通过Authorization标头发送,也可以尝试request.Headers[HttpRequestHeader.Authorization] = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts";
嗯,所以问题是由服务器代码引起的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);
但是对我来说很难找到它很奇怪!