Asp.Net Core 2.2 — Понимание промежуточного программного обеспечения аутентификации и внешних входов в систему

Я пытался понять эту концепцию, но у меня много вопросов, и, к сожалению, все официальные документы и руководства основаны на шаблонах Visual Studio с индивидуальными учетными записями пользователей.

Моя цель довольно проста, я считаю. У меня есть веб-приложение, которое будет поддерживать только входы внешних провайдеров (а именно: Facebook, Twitter и LinkedIn). Я не хочу поддерживать аутентификацию с помощью файлов cookie, поскольку не будет поддержки пользовательского имени пользователя/пароля.

Моя первая проблема — определить AuthenticationScheme по умолчанию. Ниже мой файл startup.cs:

services.AddAuthentication()
        .AddFacebook(/* options */)
        .AddTwitter(/* options */)

Если я определяю действие контроллера с атрибутом авторизации, я получаю ошибку, не определяющую схему аутентификации по умолчанию, когда я нажимаю на этот маршрут. Однако я хочу, чтобы пользователи перенаправлялись на мой маршрут входа, если они не авторизованы. Если я изменю startup.cs, как показано ниже, все будет работать, но тогда я думаю, что поддерживаю аутентификацию cookie (аутентификация старых форм?), которую я не хочу.

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie()
        .AddFacebook(/* options */)

Моя другая проблема заключается в том, что я не знаю, что происходит под капотом вызова AddFacebook(). Если я настрою свое промежуточное ПО таким образом и войду в Facebook, я волшебным образом получу все необходимые токены, утверждения, и вдруг у меня будет установлен файл cookie приложения, и мой маршрут обратного вызова fb_login может получить доступ к токену Facebook! Когда я проверяю сетевые запросы, я вижу, что есть доступ к маршруту входа в Facebook, который я не определил, и я предполагаю, что под капотом он вызывает HttpContext.SignInAsync() и т. д. ... но если я обновлю свой fb- обратный вызов входа и проверьте,

HttpContext.AuthenticateAsync(FacebookDefaults.AuthenticationScheme) 

возвращает Success = true нет! возвращает false! Но это было правдой всего секунду назад?

Кроме того, когда следует использовать такие методы, как AuthenticateAsync() и SignInAsync()?

Короче говоря, мне нужно руководство или документация, объясняющая это промежуточное ПО без инфраструктуры идентификации asp.net, EntityFramework и шаблонов.

Я хочу понять, как простой вызов AddFacebook() связывает все, и если я хочу сделать это вручную (скажем, с помощью AddOauth), как я могу добиться той же функциональности?

Я не поклонник «автоматически работающего» кода, поэтому, если кто-то может объяснить, что здесь происходит, я был бы очень признателен.


person Tequilalime    schedule 24.01.2019    source источник
comment
Я также пытаюсь реализовать вход в социальные сети вручную, но документации не существует.   -  person purplesoft    schedule 18.02.2019


Ответы (1)


Аутентификация cookie используется для сохранения состояния аутентификации между запросами. Альтернативы этому нет, и это не то же самое, что аутентификация с помощью форм, хотя файлы cookie используются в обоих случаях. Причина этого просто в том, что файлы cookie — это то, что заставляет состояние работать по протоколу HTTP, который сам по себе не имеет состояния. Если исключить использование файлов cookie, то другого механизма для сохранения состояния не будет.

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

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

person Chris Pratt    schedule 24.01.2019