【发布时间】:2020-01-06 04:39:18
【问题描述】:
我有一个 Bearer 令牌,需要根据 api 和 validateToken 端点对其进行验证。端点方面像这样的 json:
{
"jwtToken": "my token"
}
我大摇大摆地尝试使用 url 成功完成此端点 http://10.212.226.31:5022/api/v1/validateToken
但我需要通过代码进行验证,然后我得到一个 401 'Unauthorized'。
HttpClient client = new HttpClient
{
BaseAddress = new Uri("http://10.212.226.31:5022/")
};
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string token = accessToken.Replace("Bearer ", "");
HttpResponseMessage response = await client.PostAsJsonAsync(
"api/v1/validateToken", token);
在响应对象我得到 401。
怎么了?关于json的一些东西? 如何将正确的东西交给端点?
补充:
我在客户的虚拟机上远程工作,他不允许安装软件。 Fiddler and co 不可用。
我也试过这个,但它不起作用:
ValidateTokenRequest tokenJson = new ValidateTokenRequest
{
jwtToken = token
};
HttpResponseMessage response = await client.PostAsJsonAsync(
"api/v1/validateToken", tokenJson);
【问题讨论】:
-
在调用 PostAsJsonAsync 时尝试将令牌作为 json 或某个对象而不是字符串传递。
-
使用像wireshark或fiddler这样的嗅探器并使用swagger捕获第一个请求。然后与使用 C# 应用程序的第一个请求进行比较。您需要在 c# 客户端中修改标头。我怀疑它可能是指示要使用的默认浏览器的 Content-Type。
-
您的“api/v1/validateToken”端点是否希望令牌以编码或未编码的形式发布给它?我相信很可能在执行
string token = accessToken.Replace("Bearer ", "");之后,您的token变量包含类似这样的内容:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c如果“api/v1/validateToken”希望看到像这样{"jwtToken": "my token"}的未编码 JSON,它根本无法处理数据发布.... -
@Xiaosu 我尝试使用对象以及对象作为字符串,但不起作用。
-
@jdweng 我在客户的虚拟机上远程工作,他不允许安装软件。 Fiddler and co 不可用。
标签: c# .net authentication jwt token