JWT Bearer 不断返回 401 状态 - Bearer error="invalid_token", error_description="签名无效"

问题描述 投票:0回答:2

我在我的 Web API 中实现了 Jwt Bearer,我成功获得了登录令牌。我复制/粘贴此令牌以使用它进行授权,然后我收到了

Bearer error="invalid_token", error_description="签名是 无效”

ValidIssuer 是 WebAPI Url,部署在 Azure 中

ValidAudience 是 Angular 前端 URL,也部署在 Azure 中

我花了几个小时寻找问题,但似乎没有找到解决方案。

即使将 ValidateIssuer & -Audience 设置为 false,也不能解决问题。我错过了什么还是你看到错误了?

Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
                });
            });
            services.ConfigureIISIntegration();

            services.ConfigureMsSqlContext(Configuration);

            services.ConfigureRepositoryWrapper();

            services.AddAuthentication(opt => {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.SaveToken = true;
                options.RequireHttpsMetadata = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    ValidIssuer = Configuration["JWT:Issuer"],
                    ValidAudience = Configuration["JWT:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Secret"]))
                };
            });

            services.AddControllers();
        }

        
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseDeveloperExceptionPage();

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseCors("CorsPolicy");

            app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.All
            });

            app.UseAuthentication();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
asp.net-core asp.net-web-api jwt bearer-token
2个回答
1
投票

我的问题的解决方案,也许很小但很有影响力的细节

我忘记将授权属性放在我的请求方法之上

[HttpGet, Authorize]
public IActionResult GetMaterialDetails()

0
投票

这没有帮助,授权属性已经存在,

授权属性如何工作?在我的例子中,当我删除它时,它开始访问 API 端点和我的自定义过滤器来检查组。

© www.soinside.com 2019 - 2024. All rights reserved.