我正在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);
当我尝试与Postman进行完全相同的简单呼叫时,它会返回一个清晰的status200代码。
有人知道我在做什么错吗?
答案 0 :(得分:0)
在Postman中,您将发送带有标头值为Authorization且值为Bearer令牌的常规标头键值对。但是,在您的代码中,您将其作为授权标头发送出去。
尝试将其作为具有键值对的常规标头发送,如下所示:
request.Headers.Add("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts");
如果您想通过Authorization标头发送邮件,也可以尝试
request.Headers[HttpRequestHeader.Authorization] = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0IjpbIjBuR29nVU40amtLd1pVb0xiK2pvMUE9PSIsIjZ0dmFWMHpWU0VLZk1GMDhqL2diRUE9PSJdLCJzdWIiOiJhMWQxNDI2OC1iZmMzLTRiM2EtOGNkNS04NDUyNzhjNWNiMzciLCJleHAiOjE1ODMzMTgwMTcsImlzcyI6IlRlc3QuY29tIiwiYXVkIjoiVGVzdC5jb20ifQ.132BrlZidEUDEBIGK_nNr7Dw50pFyTl15jMGuRwbsts";
答案 1 :(得分:0)
嗯,所以问题是由服务器代码引起的
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);
但是我觉得很奇怪,很难找到它!