InvalidOperationException:未指定 authenticationScheme,也未找到 DefaultChallengeScheme。 (.net 核心 5)
InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. (.net core 5)
我使用 .net 5 web api 创建我的应用程序。
我将 [Authorize] 放在控制器的顶部。
我使用 Identityserver4 作为身份验证服务器。(localhost:5000)
这是我的 startup.cs class:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<MyContext>(opts =>
opts.UseInMemoryDatabase("MyDb"));
services.AddAuthentication("bearer")
.AddIdentityServerAuthentication(opts =>
{
opts.Authority = "http://locallhost:5000";
opts.RequireHttpsMetadata = false;
opts.ApiName = "myApi";
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "CustomerApi", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "CustomerApi v1"));
}
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
但我得到以下错误:
error
请指导我解决我的问题。
我搜索了很多时间,但答案是针对 .net 3.1 的。
我通常有这样的设置:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
我也不会使用 AddIdentityServerAuthentication(旧版本的 IdentityServer 使用),而是专注于使用 AddJwtBearer 方法。请参阅文档 here
你的代码没问题。
但你应该写:
services.AddAuthentication("Bearer")
而不是
services.AddAuthentication("bearer")
之后你可能 运行 正确。
我使用 .net 5 web api 创建我的应用程序。 我将 [Authorize] 放在控制器的顶部。 我使用 Identityserver4 作为身份验证服务器。(localhost:5000) 这是我的 startup.cs class:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<MyContext>(opts =>
opts.UseInMemoryDatabase("MyDb"));
services.AddAuthentication("bearer")
.AddIdentityServerAuthentication(opts =>
{
opts.Authority = "http://locallhost:5000";
opts.RequireHttpsMetadata = false;
opts.ApiName = "myApi";
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "CustomerApi", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "CustomerApi v1"));
}
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
但我得到以下错误: error
请指导我解决我的问题。 我搜索了很多时间,但答案是针对 .net 3.1 的。
我通常有这样的设置:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
我也不会使用 AddIdentityServerAuthentication(旧版本的 IdentityServer 使用),而是专注于使用 AddJwtBearer 方法。请参阅文档 here
你的代码没问题。 但你应该写:
services.AddAuthentication("Bearer")
而不是
services.AddAuthentication("bearer")
之后你可能 运行 正确。