Идентификация по схеме¶
В некоторых сценариях можно использовать несколько методов аутентификации, куки аутентификацию для логина и аутентификацию для javascript запросов. В некоторых случаях у вас может быть несколько экземпляров связующего ПО аутентификации, например, два связующих ПО куки, где одно отвечает за базовую аутентификацию, а второе создается при запуске многофакторной аутентификации, если пользователь запросил операцию, требующую особую безопасность.
Аутентификационные схемы создаются тогда, когда связующее ПО аутентификации настраивается во время аутентификации, например:
- app.UseCookieAuthentication(new CookieAuthenticationOptions()
- {
- AuthenticationScheme = “Cookie”, LoginPath = new PathString(“/Account/Unauthorized/”), AccessDeniedPath = new PathString(“/Account/Forbidden/”), AutomaticAuthenticate = false
});
app.UseBearerAuthentication(options => {
options.AuthenticationScheme = “Bearer”; options.AutomaticAuthenticate = false;});
Здесь было добавлено два связующих ПО аутентификации.
Примечание
При добавлении нескольких связующих ПО аутентификации вы должны убедиться, что связующее ПО не запускается автоматически. В данном случае вы должны настроить свойство
AutomaticAuthentication
на false. Если вы так не сделаете, то схема аутентификации не будет работать.
Выбор схемы с помощью атрибута Authorize¶
Если связующее ПО не добавляется автоматически, вы должны решить, какое связующее ПО нужно вызвать. Самый простой способ вызвать связующее ПО - это использовать параметр AuthenticationSchemes
. Это параметр принимает аутентификационные схемы, разделенные запятыми. Например:
[Authorize(AuthenticationSchemes = "Cookie,Bearer")]
public class MixedController : Controller
В примере выше будет запущено все связующее ПО для проверки идентификации текущего пользователя. При указании одной схемы запускается только указанное связующее ПО:
[Authorize(AuthenticationSchemes = "Bearer")]
В данном случае запустится только связующее ПО схемы Bearer, а все сущности, основанные на куки, будут игнорироваться.
Выбор схемы¶
Если вы хотите указать желаемую схему в политике, то при добавлении политики можете указать коллекцию AuthenticationSchemes
.
options.AddPolicy("Over18", policy =>
{
policy.AuthenticationSchemes.Add("Bearer");
policy.RequireAuthenticatedUser();
policy.Requirements.Add(new Over18Requirement());
});
В данном примере политика Over18 будет запускаться только для сущности, созданной схемой Bearer.