【问题标题】:Why getting 401 when trying validating Token为什么在尝试验证令牌时得到 401
【发布时间】: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


【解决方案1】:

我需要在端点验证自己,将令牌添加到标头。

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

现在可以了。谢谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多