我的Startup.ConfigureServices有什么问题导致JWT Bearer身份验证不起作用?

时间:2019-06-17 23:31:01

标签: asp.net-core jwt

我一直在尝试将“ PwdLess”实现为ASP.Net Core 2.2应用程序的一种简单的无密码身份验证机制。它通过Authorization: Bearer <token>传递了JWT,从而成功生成了我要在我的应用程序的后端API上使用的JWT。

在我的Startup.ConfigureServices方法中,我有以下代码:

            // JWT authentication
                services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
                 {
                     options.TokenValidationParameters = new TokenValidationParameters

                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,

                        ValidIssuer = "MYISSUERSTRINGHERE"
                        ValidAudience = "MYAUDIENCESTRINGHERE"
                        IssuerSigningKey = new SymmetricSecurityKey(
                        Encoding.UTF8.GetBytes("MYSECRETHERE"))
                    };
                });

            // ASP.NET Core MVC 
            services.AddMvc();

在控制器中,在我要授权访问的方法上,我具有:

        [Authorize]
        public IActionResult SomeMethod()
        {
        }

这将抛出401,这令人感到困惑……甚至更是如此,因为如果我改为在控制器中使用以下代码,则一切都会按预期进行:

        [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
        public IActionResult ValidateToken()
        {
        }

我不明白我在Startup.ConfigureServices中缺少什么,这使我的Authorize属性上的AuthenticationSchemes值必不可少!

请您能说明我的错误吗?

1 个答案:

答案 0 :(得分:1)

根据以上注释,除了身份验证服务外,我们还需要在Authentication之前启用UseMvc()中间件(以及其他任何要访问HttpContext.User的中间件):

app.UseAuthentication();
app.UseMvc();