Нет, вы можете использовать одну политику авторизации, которая задает разные схемы аутентификации, и для успешной аутентификации с одной из них будет достаточно, чтобы продолжить, после чего требования политики авторизации проверяются на авторизацию.
Когда происходит авторизация, logi c, используемый как промежуточным ПО авторизации, так и фильтром авторизации, выглядит следующим образом (немного упрощенно):
var authenticateResult = await policyEvaluator.AuthenticateAsync(policy, httpContext);
if (HasAllowAnonymous(context))
return;
var authorizeResult = await policyEvaluator.AuthorizeAsync(
policy, authenticateResult, httpContext, context);
if (authorizeResult.Challenged)
// trigger Challenge (401)
else if (authorizeResult.Forbidden)
// trigger Forbid (403)
Во-первых, оценщик политики запрашивается проверка подлинности пользователя для политики, а затем возвращенный результат используется для авторизации пользователя. Аутентификация в оценщике политики работает следующим образом:
- Для каждого
AuthenticationScheme
в политике попытайтесь аутентифицировать пользователя. - Для всех успешных аутентификаций, объединить свои пользовательские принципалы в один принципал.
- Проверка подлинности политики прошла успешно, если был создан принципал, т.е. не менее одна проверка подлинности прошла успешно.
Итак, в В этом процессе все схемы аутентификации будут использоваться для аутентификации пользователя. Они могут быть аутентифицированы только по одной схеме, например, Bearer
и ApiKey
, или они могут даже аутентифицироваться по нескольким схемам.
Затем оценщик политики авторизует пользователя, с помощью просто позвонив в службу авторизации на авторизацию пользователя в соответствии с политикой требований . И требования политики не содержат схему аутентификации, с которой вы ее построили.
Итак, подведем итог: Нет, схемы аутентификации, которые вы передаете AuthorizationPolicyBuilder, используются только для аутентификации, но не для авторизации, и все они будут использоваться для потенциальной аутентификации пользователя.