【问题标题】:Using JWT Bearer Authentication When Call API调用 API 时使用 JWT 承载认证
【发布时间】:2021-11-24 03:52:41
【问题描述】:

我想访问已购买产品的 API,我根据产品文档使用了以下代码:

var client = new RestClient("http://example.com/api/login");

client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddParameter("username", "admin");
request.AddParameter("password", "admin");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

文档说:

身份验证通过 JWT Bearer 执行 验证。每个端点都需要身份验证,因此您将 需要在每个请求中添加以下标头

Authorization: Bearer <JWT>

如何在我的上层请求中添加 JWT 认证?

【问题讨论】:

  • 能否请您链接文档?您很可能无法使用用户名和密码生成 JWT Bearer 令牌,因为这更适合基本身份验证。您很可能需要首先使用您的用户名和密码调用另一个身份验证端点,服务器将生成一个不记名令牌并返回它,然后您可以在后续请求中使用该令牌来授权您的请求。
  • @ErmiyaEskandary 这是文档,请不要从语言列表中选择 c# documenter.getpostman.com/view/11765341/U16byA2y
  • 感谢阿卜杜勒萨拉姆!这有帮助,我已经发布了一个答案 - 如果它能让你走上正确的轨道,请告诉我?

标签: c# asp.net asp.net-core jwt http-headers


【解决方案1】:

根据documentation you've providedAccess Granted Client Credentials 部分,您需要调用承载令牌的端点是/admin/api/index.php/api/login

使用正确的凭据调用该端点将使用以下 JSON 填充您的 response.Content

{
  "status": 200,
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9kZW1vNC5zYXNyYWRpdXMuY29tXC9hZG1pblwvYXBpXC9pbmRleC5waHBcL2FwaVwvbG9naW4iLCJpYXQiOjE2MzA0MDU5OTgsImV4cCI6MTYzMDQwOTU5OCwibmJmIjoxNjMwNDA1OTk4LCJqdGkiOiJCZmdvN00zN2pkbGtRRzFhIiwic3ViIjoxLCJwcnYiOiJkNzk3N2M0N2U5MTY5NjUxMDEwNzM0ZDJmYmY4Y2MxMzlmM2U1MDM0In0.7tNWgF6psOPKpPC9-zU_hEK_GLx3-BeFlIW9LE4wzYo"
}

将上述 JSON 对象反序列化为令牌对象,token 字段将成为您的 JWT 令牌。

Token.cs

public class Token
{
    public int status { get; set; }
    public string token { get; set; }
}
var tokenObj = JsonConvert.DeserializeObject<Token>(response.Content);
string token = tokenObj.token;

对于后续请求,要进行身份验证,请添加此行,您应该一切顺利。

request.AddHeader("Authorization", $"Bearer {token}");

【讨论】:

  • 我收到“内部服务器错误”
  • @AbdulsalamElsharif 我无法提供更多信息,但您的网址正确吗?您的用户名和密码正确吗?您关于如何在 RestSharp 请求上设置不记名令牌的原始问题已得到解答。
【解决方案2】:
request.AddHeader("Authorization", $"Bearer {Token}");

【讨论】:

  • 如何获取Token?
  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:stackoverflow.com/help/how-to-answer。祝你好运?
猜你喜欢
  • 2018-09-16
  • 2017-08-03
  • 2015-10-18
  • 2016-06-13
  • 2018-11-25
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多