调用 API 时使用 JWT 承载认证
Posted
技术标签:
【中文标题】调用 API 时使用 JWT 承载认证【英文标题】:Using JWT Bearer Authentication When Call API 【发布时间】: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 感谢阿卜杜勒萨拉姆!这有帮助,我已经发布了一个答案 - 如果它能让你走上正确的轨道,请告诉我? 【参考方案1】:根据documentation you've provided 的Access 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? 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?以上是关于调用 API 时使用 JWT 承载认证的主要内容,如果未能解决你的问题,请参考以下文章