5

Это documentation describes в части, как использовать более одной схемы аутентификации:Как я могу присвоить соответствующий идентификатор носителя и Cookie в ASP.NET с несколькими схемами авторизации?

В некоторых случаях, таких как Single Page Applications можно в конечном итоге с несколькими методами аутентификации. Например, ваше приложение может использовать аутентификацию на основе файлов cookie для входа в систему и проверки подлинности на предъявителя для запросов JavaScript. В некоторых случаях у вас может быть несколько экземпляров промежуточного программного обеспечения для проверки подлинности. Например, два промежуточных файла cookie, в которых один содержит базовый идентификатор, и один создается при многофакторной аутентификации, потому что пользователь запросил операцию, требующую дополнительной безопасности.

Пример:

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; 
}); 

Однако это только описывает, как использовать Cookie или авторизацию Bearer. Неясно, действуют ли какие-либо другие комбинации или как правильно выдавать на клиентский носитель или файлы cookie.

Как это можно сделать?

+0

Это просто пример. Вы можете создать свое собственное промежуточное программное обеспечение, добавить его в список выше и использовать в любой комбинации, например. один контроллер может разрешить аутентификацию с использованием любой из трех схем, другой может разрешить только один из них. – Vitaly

+0

Также вы можете добавить, например, промежуточное ПО «Cookie» дважды с другим именем AuthenticationScheme и другими параметрами – Vitaly

+0

Почему вы не добавляете «средний» Identity Server 4,0? Я сделал это, и это спасло мне много времени, а также ответ на большинство ваших вопросов с образцами и шаблонами: http://docs.identityserver.io – Raffaeu

ответ

4

Один общий случай использования для этого, которое крупные сайты, как Facebook, Google и т.д. использование является использование нескольких куки аутентификации промежуточного слоя и установить один из них будет использоваться по умолчанию с помощью AutomaticAuthenticate

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
    AuthenticationScheme = "InsecureLongLived", 
    LoginPath = new PathString("/Account/Unauthorized/"), 
    AccessDeniedPath = new PathString("/Account/Forbidden/"), 
    AutomaticAuthenticate = true 
}); 
app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
    AuthenticationScheme = "SecureAndShortLived", 
    LoginPath = new PathString("/Account/Unauthorized/"), 
    AccessDeniedPath = new PathString("/Account/Forbidden/"), 
    AutomaticAuthenticate = false 
}); 
  • по умолчанию один долговечен и используется для некритических сценариев аутентификации, например на Facebook это может быть просмотр вашей страницы профиля.
  • Более безопасный и недолгий срок службы используется для критически важных действий пользователя, таких как изменение пароля или информации о профиле.

Это дает вам возможность не входить в систему все время с помощью долгого печенья, но как только вам нужно сделать что-то потенциально опасное, вы переключитесь на работу с более коротким проживанием и, таким образом, более безопасным cookie, который требует, чтобы пользователь снова заходил в систему.

+1

Отличный ответ, и это действительно помогло мне. Но я заметил, что эта документация (https://docs.microsoft.com/en-us/aspnet/core/security/authorization/limitingidentitybyscheme) говорит, что ни один из них не должен иметь значение «AutomaticAuthenticate» равным true. Мне очень нравится этот подход, но его можно использовать для собственных сценариев на основе JWT? Я предполагаю, что родному клиенту придется управлять и токенами, и вычислять его, потому что сервер просто вернет 401, и вы не узнаете, какая политика пытается повторить аутентификацию. – nhwilly

+1

Muhammad, как вы переключаетесь обратно на менее безопасный файл cookie, когда вы получаете доступ к менее безопасной странице и более безопасный файл cookie истек? – nhwilly

+0

@nhwilly Ознакомьтесь с политиками авторизации. Вы можете установить один для каждого промежуточного программного обеспечения cookie, установив AuthenticationScheme. Затем вы используете правильную политику, используя атрибут Authorize. –