Въпроса ми е насочен към Курвазие и може би Стилгар (нали още ми е приятел) и който и да е друг, който е работил с .net и OIDC.
Имам .net core 3.1 web api. В него използвам Swagger. Всичките ни автентикации и авторизации стават през Identity Server 4. Казаха ми да търся дали има начин да заключа апитоми/swagger/index.html и никой да не го отваря да гледа схемата без да съм ги логнал в IS4.
Swagger не предоставя възможност да залостиш индексната страница с някаква автентикация и затова прибегнах до следният код
protected override void Configure(IApplicationBuilder app)
{
app.UseStaticFiles()
.UseRouting()
.UseAuthorization()
.UseEndpoints(endpoints =>
{
var pipeline = endpoints.CreateApplicationBuilder().Build();
var oidcAuthorize = new AuthorizeAttribute { AuthenticationSchemes = OpenIdConnectDefaults.AuthenticationScheme };
endpoints.Map("/swagger/index.html", pipeline).RequireAuthorization(oidcAuthorize);
});
}
Съответно си имам и добавени AddAuthentication, AddCookie и AddOpenIdConnect към IServiceCollection.
Та какво се случва : Рекуествам апитоми/swagger/index.html и съм препратен към логина на IS4. Логвам се успешно. Редиректнът съм към апитоми/signin-oidc, което е дефолтният път в OpenIdConnectOptions.CallbackPath и AddOpenIdConnect трябва вече да е сложиш хендлър за този път и съответно да ме върне към изначалната страница (/апитоми/swagger/index.html). Обече не иска, забива си на 404.
П.С. Всички коментари, които не са директно по въпросът ще бъдат изтривани директно от мен. Без брадвички и без сечива.