Использование проверки подлинности поставщика входа в социальных сетях без ASP.NET Core Identity
Авторы: Кирк Ларкин (Kirk Larkin) и Рик Андерсон (Rick Anderson)
Проверка подлинности Facebook и Google в ASP.NET Core описывает, как разрешить пользователям входить с помощью OAuth 2.0 с учетными данными внешних поставщиков проверки подлинности. Описанный в этой статье подход включает ASP.NET Core Identity в качестве поставщика проверки подлинности.
В этом примере показано, как использовать внешний поставщик проверки подлинности без ASP.NET Core Identity. Этот подход полезен для приложений, которые не требуют всех функций ASP.NET Core Identity, но по-прежнему требуют интеграции с доверенным внешним поставщиком проверки подлинности.
В этом примере используется проверка подлинности Google для проверки подлинности пользователей. Использование проверки подлинности Google сдвигает многие сложности управления процессом входа в Google. Чтобы интегрироваться с другим внешним поставщиком проверки подлинности, ознакомьтесь со следующими статьями:
- Проверка подлинности Facebook
- Проверка подлинности Майкрософт
- Проверка подлинности Twitter
- Другие поставщики
Настройка
Настройте Program.cs
схемы проверки подлинности приложения с помощью AddAuthenticationAddCookieметодов и AddGoogle методов:
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.Google;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options =>
{
options.ClientId = builder.Configuration["Authentication:Google:ClientId"];
options.ClientSecret = builder.Configuration["Authentication:Google:ClientSecret"];
});
builder.Services.AddRazorPages();
Вызов AddAuthentication для установки приложения DefaultScheme. Это DefaultScheme
схема по умолчанию, используемая следующими HttpContext
методами расширения проверки подлинности:
Установка значения приложения ("Cookies") настраивает приложение DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme для использования Cookieв качестве схемы по умолчанию для этих методов расширения. При настройке приложения DefaultChallengeSchemeGoogleDefaults.AuthenticationScheme значение ("Google") приложение настраивает приложение для использования Google в качестве схемы по умолчанию для вызовов ChallengeAsync
. DefaultChallengeScheme
переопределяется DefaultScheme
. Дополнительные AuthenticationOptions свойства, которые переопределяются DefaultScheme
при установке.
В Program.cs
, вызов UseAuthentication и UseAuthorization. Это сочетание ПО промежуточного слоя задает HttpContext.User свойство и запускает ПО промежуточного слоя авторизации для запросов:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
Дополнительные сведения о схемах проверки подлинности см. в разделе "Основные понятия проверки подлинности". Дополнительные сведения о проверке подлинности см. в cookie статье "Использование cookie проверки подлинности без ASP.NET CoreIdentity".
Применение авторизации
Проверьте конфигурацию проверки подлинности приложения, применяя атрибут [Авторизовать] к контроллеру, действию или странице. Следующий код ограничивает доступ к Privacy странице пользователям, прошедшим проверку подлинности:
[Authorize]
public class PrivacyModel : PageModel
{
}
Сохранение маркера доступа
SaveTokens определяет, следует ли хранить маркеры доступа и обновления в AuthenticationProperties после успешной авторизации. SaveTokens
По умолчанию устанавливается значение false
, чтобы уменьшить размер окончательной проверки подлинности cookie.
Чтобы сохранить маркеры доступа и обновления после успешной авторизации, установите SaveTokens
значение true
в Program.cs
:
builder.Services
.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options =>
{
options.ClientId = builder.Configuration["Authentication:Google:ClientId"];
options.ClientSecret = builder.Configuration["Authentication:Google:ClientSecret"];
options.SaveTokens = true;
});
Чтобы получить сохраненный маркер, используйте GetTokenAsync. В следующем примере извлекается маркер с именем access_token
:
public async Task OnGetAsync()
{
var accessToken = await HttpContext.GetTokenAsync(
GoogleDefaults.AuthenticationScheme, "access_token");
// ...
}
Выйти
Чтобы выйти из текущего пользователя и удалить его cookie, вызовите SignOutAsync. Следующий код добавляет Logout
обработчик страницы на страницу индекса :
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
Обратите внимание, что вызов SignOutAsync
не указывает схему проверки подлинности. Приложение использует , DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme
как резервный вариант.
Дополнительные ресурсы
Проверка подлинности Facebook и Google в ASP.NET Core описывает, как разрешить пользователям входить с помощью OAuth 2.0 с учетными данными внешних поставщиков проверки подлинности. Описанный в этой статье подход включает ASP.NET Core Identity в качестве поставщика проверки подлинности.
В этом примере показано, как использовать внешний поставщик проверки подлинности без ASP.NET Core Identity. Этот подход полезен для приложений, которые не требуют всех функций ASP.NET Core Identity, но по-прежнему требуют интеграции с доверенным внешним поставщиком проверки подлинности.
В этом примере используется проверка подлинности Google для проверки подлинности пользователей. Использование проверки подлинности Google сдвигает многие сложности управления процессом входа в Google. Чтобы интегрироваться с другим внешним поставщиком проверки подлинности, ознакомьтесь со следующими статьями:
- Проверка подлинности Facebook
- Проверка подлинности Майкрософт
- Проверка подлинности Twitter
- Другие поставщики
Настройка
В методе ConfigureServices
настройте схемы проверки подлинности приложения с помощью AddAuthenticationметодов AddCookieи AddGoogle методов:
public void ConfigureServices(IServiceCollection services)
{
// requires
// using Microsoft.AspNetCore.Authentication.Cookies;
// using Microsoft.AspNetCore.Authentication.Google;
// NuGet package Microsoft.AspNetCore.Authentication.Google
services
.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
})
.AddCookie()
.AddGoogle(options =>
{
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
services.AddRazorPages();
}
Вызов AddAuthentication для установки приложения DefaultScheme. Это DefaultScheme
схема по умолчанию, используемая следующими HttpContext
методами расширения проверки подлинности:
Установка значения приложения ("Cookies") настраивает приложение DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme для использования Cookieв качестве схемы по умолчанию для этих методов расширения. При настройке приложения DefaultChallengeSchemeGoogleDefaults.AuthenticationScheme значение ("Google") приложение настраивает приложение для использования Google в качестве схемы по умолчанию для вызовов ChallengeAsync
. DefaultChallengeScheme
переопределяется DefaultScheme
. Дополнительные AuthenticationOptions свойства, которые переопределяются DefaultScheme
при установке.
В Startup.Configure
, вызов и UseAuthorization между вызовами UseAuthenticationUseRouting и UseEndpoints. Это сочетание ПО промежуточного слоя задает HttpContext.User свойство и запускает ПО промежуточного слоя авторизации для запросов:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
Дополнительные сведения о схемах проверки подлинности см. в разделе "Основные понятия проверки подлинности". Дополнительные сведения о проверке подлинности см. в cookie статье "Использование cookie проверки подлинности без ASP.NET CoreIdentity".
Применение авторизации
Проверьте конфигурацию проверки подлинности приложения, применяя атрибут [Авторизовать] к контроллеру, действию или странице. Следующий код ограничивает доступ к Privacy странице пользователям, прошедшим проверку подлинности:
[Authorize]
public class PrivacyModel : PageModel
{
}
Выйти
Чтобы выйти из текущего пользователя и удалить его cookie, вызовите SignOutAsync. Следующий код добавляет Logout
обработчик страницы на страницу индекса :
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
Обратите внимание, что вызов SignOutAsync
не указывает схему проверки подлинности. Приложение DefaultScheme
используется в качестве резервной CookieAuthenticationDefaults.AuthenticationScheme
версии.
Дополнительные ресурсы
ASP.NET Core
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по