ASP.NET Core JWT 令牌无法通过 HttpClient 工作

Posted

技术标签:

【中文标题】ASP.NET Core JWT 令牌无法通过 HttpClient 工作【英文标题】:ASP.NET Core JWT Token not working via HttpClient 【发布时间】:2020-08-17 06:22:32 【问题描述】:

我是 JWT 身份验证的新手,我已经使用此处的教程配置了我的 ASP.NET Core 3 API 以进行令牌身份验证:

https://chrissainty.com/securing-your-blazor-apps-authentication-with-clientside-blazor-using-webapi-aspnet-core-identity/

我已将[Authorize] 属性添加到控制器,使用 Postman 我可以登录并获取令牌,并通过 Postman 使用令牌从控制器检索数据 - 一切都按预期工作。

我的问题是,当我通过 Xamarin 应用程序使用 C# HttpClient 登录,然后使用发回的令牌时,我通过 Postman 或 HttpClient 访问控制器时收到 401 错误。

我使用的代码如下:

var client = new HttpClient();

var model = new JwtLoginModel()
            
                Email = email,
                Password = password,
                RememberMe = false
            ;

var json = JsonConvert.SerializeObject(model);

HttpContent httpContent = new StringContent(json);
var response = await client.PostAsync(Constants.BaseApiAddress + "api/Login", new StringContent(json, Encoding.UTF8, "application/json"));

var content = await response.Content.ReadAsStringAsync();
JObject jwtDynamic = JsonConvert.DeserializeObject<dynamic>(content);
var accessToken = jwtDynamic.Value<string>("token");

使用通过 Postman 返回的 accessToken(和 HttpClient),都返回 401 错误。

谁能建议我做错了什么?

【问题讨论】:

您能否发布一个示例,比较通过 Postman 和 HttpClient 进行身份验证(获取令牌)时的输出(我正在考虑 content 的样子)? 这是获取我假设的令牌的代码。你能分享你使用它的代码吗? 【参考方案1】:

感谢大家的帮助

最后我决定使用运行良好的 Identity Server 4 实现更容易

【讨论】:

以上是关于ASP.NET Core JWT 令牌无法通过 HttpClient 工作的主要内容,如果未能解决你的问题,请参考以下文章

C# Jwt 令牌生成失败 asp.net core 2.2

如何在 asp.net core 中设置 jwt 令牌的生命周期

具有用户权限的基于 JWT 令牌的授权 Asp.net core 2.0

从 ASP.NET Core 中的 API 读取 JWT 令牌

Asp.Net Core Identity 使用 JWT 中的哪些信息来将令牌授权为有效?

如何保护 ASP.NET Core Web API 免受被盗 JWT 令牌以进行模拟