【发布时间】:2020-09-30 23:30:58
【问题描述】:
我正在尝试组建一个使用 Asp.Net Core Identity、Identity Server 4 和 Web API 项目的小项目。
我的 MVC 项目使用 IdS4 正确进行身份验证,我从中获得了一个 JWT,然后我可以将它添加到我的 Web API 项目的请求的标头中,这一切都按预期工作。
我遇到的问题是我实际上是如何将令牌添加到HttpClient,基本上我为每个明显错误的请求设置它,否则我会在网上看到其他示例,但我没有无法确定重构它的好方法。我已经阅读了很多文章,但我发现关于这部分流程的信息很少,所以我猜测它可能非常简单,以至于指南中从未详细说明,但我仍然不知道!
这是一个调用我的 API 的示例 MVC 操作:
[HttpGet]
[Authorize]
public async Task<IActionResult> GetFromApi()
{
var client = await GetHttpClient();
string testUri = "https://localhost:44308/api/TestItems";
var response = await client.GetAsync(testUri, HttpCompletionOption.ResponseHeadersRead);
var data = await response.Content.ReadAsStringAsync();
GetFromApiViewModel vm = new GetFromApiViewModel()
{
Output = data
};
return View(vm);
}
这是我调用的GetHttpClient() 方法(当前位于同一个控制器中):
private async Task<HttpClient> GetHttpClient()
{
var client = new HttpClient();
var expat = HttpContext.GetTokenAsync("expires_at").Result;
var dataExp = DateTime.Parse(expat, null, DateTimeStyles.RoundtripKind);
if ((dataExp - DateTime.Now).TotalMinutes < 10)
{
//SNIP GETTING A NEW TOKEN IF ITS ABOUT TO EXPIRE
}
var accessToken = await HttpContext.GetTokenAsync("access_token");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
return client;
}
我的StartUp 类在我收集的内容中非常标准,但如果它们有用,那么我会添加它们。
【问题讨论】:
标签: asp.net-core jwt