Я изучаю Asp. Net Core Identity вместе с Identity Server 4. Пока мой пользователь аутентифицирован по IdS4, затем я могу получить токен для доступа к моему API, это все работает, как ожидалось, однако мне всегда нужно создавать свои атрибуты авторизации на моем контроллере API с указанным параметром AuthenticationScheme
, даже если я указываю его своим API Config.cs
(согласно нескольким источникам / руководствам, которые я прочитал).
Это мой API Config.cs
, различные попытки я оставил закомментированными. Каждая версия не имеет никакого эффекта, иногда ошибка 500 вместо 401, но это будет из-за того, что я буду делать что-то очень неправильное!
Config.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationCoreDbContext>(opt => opt.UseInMemoryDatabase("TestItem"));
services
.AddMvc();
services
//.AddAuthentication(cfg =>
//{
// cfg.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
// cfg.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
//})
.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
//.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "https://localhost:5001";
options.RequireHttpsMetadata = false;
options.ApiName = "web_api";
options.EnableCaching = true;
options.CacheDuration = TimeSpan.FromMinutes(10);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Вот образец конечной точки из моего контроллера API. В текущем состоянии он работает нормально, однако я считаю, что мне не нужно указывать AuthenticationSchemes
, но если я удалю его, я всегда получаю ошибку 401. Есть ли у кого-нибудь предложения по поводу того, что мне не хватает?
API-контроллер
// GET: api/TestItems
[HttpGet]
//[Authorize]
[Authorize(AuthenticationSchemes = "Bearer")]
public async Task<ActionResult<IEnumerable<TestItemDto>>> GetTestItems()
{
//SNIP
}