【问题标题】:ASP.NET Core 3.1 doesn't authorize bearer tokenASP.NET Core 3.1 不授权不记名令牌
【发布时间】:2020-07-09 14:44:42
【问题描述】:

我将[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,但是当我尝试执行该控制器操作时,我得到了“未经授权”。

【问题讨论】:

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


【解决方案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();

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2020-11-16
    • 2020-10-19
    • 2018-09-22
    • 1970-01-01
    • 2021-01-01
    • 2016-09-25
    • 2020-05-14
    相关资源
    最近更新 更多