.NET Core 8.0集成JWT认证时出现Scheme already exists: Bearer错误
.NET Core 8.0集成Identity与JWT Bearer认证时出现Scheme重复错误
运行应用时遇到如下错误:
System.InvalidOperationException: Scheme already exists: Bearer
我的Program.cs代码如下:
using Solv.Identity.Api.Common; using Solv.Identity.Api.Configurations; using Solv.Identity.Api.Endpoints; using Solv.Identity.Infrastructure; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using Solv.Identity.Application.Auth; using Solv.Identity.Application.Features.Configuration; using System.Text; using Solv.Identity.Application.Features.Users; using System; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; var builder = WebApplication.CreateBuilder(args); // Register AuthService builder.Services.AddTransient<AuthService>(); // Add authentication and authorization builder.Services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(x => { x.TokenValidationParameters = new TokenValidationParameters { IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration.PrivateKey)), ValidateIssuer = false, ValidateAudience = false }; }); builder.Services.AddAuthorization(x => { x.AddPolicy("tech", p => p.RequireRole("developer")); }); // Controllers builder.AddValidationSetup(); // Swagger builder.Services.AddSwaggerSetup(); // Persistence builder.Services.AddPersistenceSetup(builder.Configuration); // Application layer setup builder.Services.AddApplicationSetup(); // Request response compression builder.Services.AddCompressionSetup(); //// HttpContextAcessor builder.Services.AddHttpContextAccessor(); //// Mediator builder.Services.AddMediatRSetup(); //// Exception handler builder.Services.AddExceptionHandler<ExceptionHandler>(); builder.Logging.ClearProviders(); // Add serilog if (builder.Environment.EnvironmentName != "Testing") { //builder.Host.UseLoggingSetup(builder.Configuration); // Add opentelemetry builder.AddOpenTemeletrySetup(); } builder.Services.AddHttpClient(); #region Keycloak builder.Services.AddKeycloakServices(); builder.AddKeycloakSettings(); builder.AddKeycloakAuthorization(); #endregion var app = builder.Build(); // Configure the HTTP request pipeline. app.UseResponseCompression(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseSwaggerSetup(); app.UseHsts(); app.UseResponseCompression(); app.UseHttpsRedirection(); // Configure middleware app.UseAuthentication(); app.UseAuthorization(); // Define endpoints app.MapGet("/login", (AuthService service) => { var user = new User( 1, "M.Sohail", "M.Sohail", "sohail@gmail.com", "abcd123", new[] { "developer" }); return service.Create(user); }); app.MapGet("/test", () => "OK!") .RequireAuthorization(); app.MapGet("/test/tech", () => "tech OK!") .RequireAuthorization("tech"); app.UseMiddleware<LoggingMiddleware>(); await app.Migrate(); await app.RunAsync();
我已尝试调整Program.cs中中间件和认证设置的顺序,也检查过是否重复调用AddAuthentication和AddJwtBearer方法,但错误仍未解决。若需要,可提供聚焦于认证设置的简化版代码。
环境
- .NET Core 8.0
- Identity框架版本8.0.0
- Visual Studio 2022
- Windows 10
内容的提问来源于stack exchange,提问作者Sohail Aslam
相关产品推荐
相关产品推荐

