ASP.NET Core 3.1不授权承载令牌

时间:2020-03-29 04:12:34

标签: c# asp.net-core asp.net-core-3.1

我在控制器操作中添加了[Authorize(Roles="CompanyRole")]批注,在Startup类中,我有:

app.Use(async (context, next) =>
        {
            if(context.Session.GetString("user") != null)
            {
                var tk = JsonConvert.DeserializeObject<UserModel>(context.Session.GetString("user"));
                if (!String.IsNullOrEmpty(tk.Token))
                {
                    context.Request.Headers.Add("Authorization", "Bearer " + tk.Token);
                }
                await next.Invoke();
            }
            else
            {
                context.Request.Path = "/Home/Login";
                await next.Invoke();
            }
        });

如果删除Authorize属性,则可以使用

获取用户信息和所有声明。
 var A = User.Identity.Name;

其中一个角色是CompanyRole,但是当我尝试执行该控制器操作时,我得到了“未授权”的信息。

1 个答案:

答案 0 :(得分:1)

您应该考虑中间件的优先级,并在授权中间件之前将其注册在Startup.cs文件中。

app.Use(async (context, next) =>
    {
        if(context.Session.GetString("user") != null)
        {
            var tk = JsonConvert.DeserializeObject<UserModel>(context.Session.GetString("user"));
            if (!String.IsNullOrEmpty(tk.Token))
            {
                context.Request.Headers.Add("Authorization", "Bearer " + tk.Token);
            }
            await next.Invoke();
        }
        else
        {
            context.Request.Path = "/Home/Login";
            await next.Invoke();
        }

    });
app.UseAuthorization();