繁体   English   中英

ASP.NET JWT 授权返回NotFound

[英]ASP.NET JWT authorization returns NotFound

我正在处理一个 api 项目,需要使用 jwt,我已经在启动时配置了它,但每当我在操作中使用 [Authorize] 时,我都会收到 404 Notfound 响应。 我还注意到,如果我使用 [Authorize(AuthenticationSchemes = "Bearer")],它将正常工作。 我不想使用那篇冗长的声明。 请问可能是什么原因? 下面是我在启动时的 jwt 配置。

services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        }).AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(Configuration.GetSection("JWTConfigurations:SecretKey").Value)),
                ValidateIssuer = true,
                ValidIssuer = Configuration.GetSection("JWTConfigurations:Issuer").Value,
                ValidateAudience = true,
                ValidAudience = Configuration.GetSection("JWTConfigurations:Audience").Value,
            };
        });

尝试这个:-

services.AddAuthentication(options => {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;  //add this to your code
})
 .AddJwtBearer(...);

或者您可以像这样在整个应用程序中授权策略:-

  services.AddControllers(opt => {
            var policy = new AuthorizationPolicyBuilder("Bearer").RequireAuthenticatedUser().Build();
            opt.Filters.Add(new AuthorizeFilter(policy));
        })

因此,为此,不需要将[Authorize(AuthenticationSchemes = "Bearer")]放在方法上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM