我有一个简单的“gate”方法,用于确定用户的jwt令牌是否有效,然后将其重定向到某个操作。我有两个需要授权的终点:
1. 其中一个仅用于确定令牌是否正确(如果不正确则返回401,否则返回OK); 2. 另一个是需要有效令牌的受保护区域。
我的问题是第一个终点返回令牌为OK,但第二个返回401。这是因为“解决方法”是:返回视图而不是操作。我意识到我忘了Authorization头,但如何添加头以重定向到操作呢?重定向到操作比View更重要,因为使用View时浏览器显示的旧URL是localhost/Gate,而不是localhost/Authorized。
1. 其中一个仅用于确定令牌是否正确(如果不正确则返回401,否则返回OK); 2. 另一个是需要有效令牌的受保护区域。
我的问题是第一个终点返回令牌为OK,但第二个返回401。这是因为“解决方法”是:返回视图而不是操作。我意识到我忘了Authorization头,但如何添加头以重定向到操作呢?重定向到操作比View更重要,因为使用View时浏览器显示的旧URL是localhost/Gate,而不是localhost/Authorized。
public async Task<IActionResult> Gate()
{
var token = ExtractToken();
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
var get = client.GetAsync($"https://localhost:12345/TokenValidator").Result;
switch (get.StatusCode)
{
case HttpStatusCode.Unauthorized:
return RedirectToAction("Unauthorized");
case HttpStatusCode.OK:
return RedirectToAction("Authorized"); // it enters this case
default:
return RedirectToAction("Index");
}
}
[Route("TokenValidator")]
[Authorize]
public IActionResult TokenValidator()
{
return new OkObjectResult("OK");
}
[Route("Authorized")]
[Authorize]
public IActionResult Authorized()
{
return View();
}