Я пытался понять эту концепцию, но у меня много вопросов, и, к сожалению, все официальные документы и руководства основаны на шаблонах 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), как я могу добиться той же функциональности?
Я не поклонник «автоматически работающего» кода, поэтому, если кто-то может объяснить, что здесь происходит, я был бы очень признателен.