Поделиться через


Использование проверки подлинности поставщика входа в социальных сетях без 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. Чтобы интегрироваться с другим внешним поставщиком проверки подлинности, ознакомьтесь со следующими статьями:

Настройка

Настройте 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") настраивает приложение DefaultSchemeCookieAuthenticationDefaults.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 не указывает схему проверки подлинности. Приложение использует , DefaultSchemeCookieAuthenticationDefaults.AuthenticationSchemeкак резервный вариант.

Дополнительные ресурсы

Проверка подлинности Facebook и Google в ASP.NET Core описывает, как разрешить пользователям входить с помощью OAuth 2.0 с учетными данными внешних поставщиков проверки подлинности. Описанный в этой статье подход включает ASP.NET Core Identity в качестве поставщика проверки подлинности.

В этом примере показано, как использовать внешний поставщик проверки подлинности без ASP.NET Core Identity. Этот подход полезен для приложений, которые не требуют всех функций ASP.NET Core Identity, но по-прежнему требуют интеграции с доверенным внешним поставщиком проверки подлинности.

В этом примере используется проверка подлинности Google для проверки подлинности пользователей. Использование проверки подлинности Google сдвигает многие сложности управления процессом входа в Google. Чтобы интегрироваться с другим внешним поставщиком проверки подлинности, ознакомьтесь со следующими статьями:

Настройка

В методе 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") настраивает приложение DefaultSchemeCookieAuthenticationDefaults.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 версии.

Дополнительные ресурсы