c# - 使用授权标头重定向到操作
问题描述
我有简单的“门”方法,它确定用户的 jwt 令牌是否有效,然后将他重定向到某些操作
我有两个需要授权的端点,
其中一个仅用于确定令牌是否正常(如果不是则返回 401,否则返回 OK)
第二个是需要有效令牌的保护区
我的问题是第一个端点返回该令牌是好的,但第二个返回 401
因为“解决方法”是:返回视图而不是动作
我意识到我忘记了授权标头,但是
如何添加标题以重定向到操作?
return redirect to action
代替 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();
}
解决方案
感谢 Jean-François Fabre 删除了我的评论。
有时,未解决的帖子中的旧评论有助于恢复辩论。
有兴趣的请关注答案。
在 Startup.cs (Configure) 中添加代码:
app.UseSession();
app.Use(async (context, next) =>
{
var JWToken = context.Session.GetString("JWToken");
if (!string.IsNullOrEmpty(JWToken))
{
context.Request.Headers.Add("Authorization", "Bearer " + JWToken);
}
await next();
});
在视图中,令牌验证后:
HttpContext.Session.SetString("JWToken", post.AccessToken);
然后您可以正常进行该过程。
我使用 RedirectToAction:
return RedirectToAction(actionName: "Default", controllerName: "Usuario");
拥抱
推荐阅读
- java - POI API 的事件模型在 3.15 版本中是否不适用(出现编译错误)?
- observable - 如何添加可观察的集合项
- java - 为什么我不能从我的多维数组中打印字符串?
- html - Angular - 未定义变量的字符串插值
- python - 失去焦点时,将数字限制的 QLineEdit 框修改为小数点后两位?
- laravel - 如何使用 Laradock 部署 Laravel 项目
- php - PHP 将十六进制字符串转换为字节数组 - 将 VB.Net 转换为 PHP
- javascript - 如何验证从文件类型的输入元素中选择的文件类型
- azure-active-directory - 尝试通过 API 访问 SFB
- oracle10g - Oracle 10g 上的浏览器兼容性问题