options.DefaultScheme = "Cookies";
Это означает, что схема аутентификации, если не указано иное, будет "Cookies"
.
options.DefaultChallengeScheme = "oidc";
Это означает, что схема проверки подлинности по умолчанию, если не указано иное, будет "oidc"
.
Вот как схемы аутентификации OIDC и Cookie обычно работают друг с другом: приложение попытается аутентифицировать пользователя, используя существующий файл cookie. Если это не удается (потому что нет файла cookie), тогда будет выполнена проверка подлинности с использованием схемы OIDC. Это затем передаст аутентификацию внешнему провайдеру, и, когда это удастся, схема OIDC подпишет пользователя, используя схему аутентификации Cookie. Это создает cookie, поэтому при следующем запросе схема проверки подлинности cookie сможет аутентифицировать пользователя (без необходимости повторного запроса схемы OIDC).
Если вы хотите, чтобы другие схемы аутентификации работали, вам придется добавить и их. AddAuthentication(…).AddCookie(…).AddOpenIdConnect(…)
просто настроит эту цепочку. Если вы также хотите аутентификацию на носителе JWT, вам также необходимо настроить ее.
Но только потому, что вы .AddJwtBearer(…)
, это не означает, что что-либо в обычном потоке изменится: схема Cookie по-прежнему будет использоваться по умолчанию, а схема OIDC по-прежнему будет вызовом по умолчанию. Как я уже говорил выше: если не указано иное.
Так что, если вы хотите авторизовать пользователя с использованием аутентификации JWT Bearer, вам необходимо явно активировать его. Как вы уже заметили, это можно сделать с помощью атрибута Authorize
. Но для того, чтобы это сработало, вам все равно придется правильно настроить аутентификацию JWT Bearer. Но тогда он может работать параллельно с уже настроенной настройкой Cookie / OIDC.