首页 > 解决方案 > 使用授权标头重定向到操作

问题描述

我有简单的“门”方法,它确定用户的 jwt 令牌是否有效,然后将他重定向到某些操作

我有两个需要授权的端点,

我的问题是第一个端点返回该令牌是好的,但第二个返回 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();
}

标签: c#asp.net-coreasp.net-core-mvcjwt

解决方案


感谢 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");

拥抱


推荐阅读