Идентификация по схеме

В некоторых сценариях можно использовать несколько методов аутентификации, куки аутентификацию для логина и аутентификацию для 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.

Поделись хорошей новостью с друзьями!
Следи за новостями!