Я перенес свое ASP. NET Базовое приложение с версии 2.2 на 3.1. У меня есть контроллер с атрибутом [Authorize]
, например:
[ApiController]
[Authorize(policy: "MyPolicy")]
[Route("api/v{version:apiVersion}/[controller]")]
public class MyController : Controller
И политика определяется в Startup.cs следующим образом:
services.AddAuthorization(options =>
{
options.AddPolicy("MyPolicy",
policy =>
{
policy.RequireRole("MyRole");
policy.RequireScope("my-scope");
}
);
});
В 2.2 все работало нормально, но после при переходе на 3.1 и включении маршрутизации конечной точки этот контроллер начал отклонять запросы к любой конечной точке, когда присутствует атрибут [Authorize]
, независимо от правил политики (перенаправление на страницу входа в систему). Когда я удаляю [Authorize]
и смотрю на User.Claims
, я вижу, что у него есть требуемые претензии (то есть scope: my-scope, role: MyRole). Это происходит, только если включена маршрутизация конечной точки, в случае использования UseMvc
все работает правильно. Что не так с авторизацией в режиме маршрутизации конечной точки?
UPD: Configure
метод выглядит следующим образом:
public void Configure(IApplicationBuilder app)
{
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseIdentityServer();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllers();
endpoints.MapRazorPages();
});
}