Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Autor: Kirk Larkin i Rick Anderson
Uwierzytelnianie w usłudze Facebook i Google w programie ASP.NET Core opisuje, jak umożliwić użytkownikom logowanie się przy użyciu protokołu OAuth 2.0 przy użyciu poświadczeń od zewnętrznych dostawców uwierzytelniania. Podejście opisane w tym artykule zawiera ASP.NET Core Identity jako dostawca uwierzytelniania.
W tym przykładzie pokazano, jak używać zewnętrznego dostawcy uwierzytelniania bez ASP.NET Core Identity. Takie podejście jest przydatne w przypadku aplikacji, które nie wymagają wszystkich funkcji platformy ASP.NET Core Identity, ale nadal wymagają integracji z zaufanym zewnętrznym dostawcą uwierzytelniania.
W tym przykładzie użyto uwierzytelniania google do uwierzytelniania użytkowników. Korzystanie z uwierzytelniania Google zmienia wiele złożoności zarządzania procesem logowania do firmy Google. Aby zintegrować z innym zewnętrznym dostawcą uwierzytelniania, zobacz następujące artykuły:
- Uwierzytelnianie za pomocą konta Facebook
- Uwierzytelnianie firmy Microsoft
- Uwierzytelnianie za pomocą konta Twitter
- Inni dostawcy
Konfigurowanie
W Program.cs
programie skonfiguruj schematy uwierzytelniania aplikacji przy AddAuthenticationużyciu metod , AddCookiei 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();
Wywołanie w celu AddAuthentication ustawienia aplikacji .DefaultScheme Jest DefaultScheme
to schemat domyślny używany przez następujące HttpContext
metody rozszerzenia uwierzytelniania:
Ustawienie ustawienia aplikacji na CookieAuthenticationDefaults.AuthenticationScheme ("Pliki cookie") powoduje skonfigurowanie aplikacji DefaultScheme
do używania plików cookie jako domyślnego schematu dla tych metod rozszerzeń. Ustawienie ustawienia aplikacji DefaultChallengeScheme na GoogleDefaults.AuthenticationScheme wartość ("Google") konfiguruje aplikację tak, aby używała google jako schematu domyślnego dla wywołań metody ChallengeAsync
. DefaultChallengeScheme
DefaultScheme
zastępuje . Zobacz AuthenticationOptions , aby uzyskać więcej właściwości, które zastępują DefaultScheme
podczas ustawiania.
W Program.cs
pliku wywołaj metodę UseAuthentication i UseAuthorization. Ta kombinacja oprogramowania pośredniczącego HttpContext.User ustawia właściwość i uruchamia oprogramowanie pośredniczące autoryzacji dla żądań:
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapRazorPages();
Aby dowiedzieć się więcej na temat schematów uwierzytelniania, zobacz Pojęcia dotyczące uwierzytelniania. Aby dowiedzieć się więcej na temat cookie uwierzytelniania, zobacz Używanie cookie uwierzytelniania bez ASP.NET Core Identity.
Stosowanie autoryzacji
Przetestuj konfigurację uwierzytelniania aplikacji, stosując atrybut [Authorize] do kontrolera, akcji lub strony. Następujący kod ogranicza dostęp do strony do Privacy użytkowników, którzy zostali uwierzytelnieni:
[Authorize]
public class PrivacyModel : PageModel
{
}
Zapisywanie tokenu dostępu
SaveTokens określa, czy tokeny dostępu i odświeżania powinny być przechowywane w AuthenticationProperties obiekcie po pomyślnym uwierzytelnieniu. SaveTokens
parametr jest domyślnie false
ustawiony, aby zmniejszyć rozmiar uwierzytelniania cookiekońcowego.
Aby zapisać tokeny dostępu i odświeżyć je po pomyślnej autoryzacji, ustaw wartość true
w pliku :SaveTokens
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;
});
Aby pobrać zapisany token, użyj polecenia GetTokenAsync. Poniższy przykład pobiera token o nazwie access_token
:
public async Task OnGetAsync()
{
var accessToken = await HttpContext.GetTokenAsync(
GoogleDefaults.AuthenticationScheme, "access_token");
// ...
}
Wyloguj się
Aby wylogować bieżącego użytkownika i usunąć go cookie, wywołaj metodę SignOutAsync. Poniższy kod dodaje procedurę Logout
obsługi strony do strony Indeks :
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
// using Microsoft.AspNetCore.Authentication;
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
Zwróć uwagę, że wywołanie metody SignOutAsync
nie określa schematu uwierzytelniania. Aplikacja używa elementu DefaultScheme
, CookieAuthenticationDefaults.AuthenticationScheme
jako rezerwowego.
Dodatkowe zasoby
Uwierzytelnianie w usłudze Facebook i Google w programie ASP.NET Core opisuje, jak umożliwić użytkownikom logowanie się przy użyciu protokołu OAuth 2.0 przy użyciu poświadczeń od zewnętrznych dostawców uwierzytelniania. Podejście opisane w tym artykule zawiera ASP.NET Core Identity jako dostawca uwierzytelniania.
W tym przykładzie pokazano, jak używać zewnętrznego dostawcy uwierzytelniania bez ASP.NET Core Identity. Takie podejście jest przydatne w przypadku aplikacji, które nie wymagają wszystkich funkcji platformy ASP.NET Core Identity, ale nadal wymagają integracji z zaufanym zewnętrznym dostawcą uwierzytelniania.
W tym przykładzie użyto uwierzytelniania google do uwierzytelniania użytkowników. Korzystanie z uwierzytelniania Google zmienia wiele złożoności zarządzania procesem logowania do firmy Google. Aby zintegrować z innym zewnętrznym dostawcą uwierzytelniania, zobacz następujące artykuły:
- Uwierzytelnianie za pomocą konta Facebook
- Uwierzytelnianie firmy Microsoft
- Uwierzytelnianie za pomocą konta Twitter
- Inni dostawcy
Konfigurowanie
W metodzie ConfigureServices
skonfiguruj schematy uwierzytelniania aplikacji przy AddAuthenticationużyciu metod , AddCookiei 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();
}
Wywołanie w celu AddAuthentication ustawienia aplikacji .DefaultScheme Jest DefaultScheme
to schemat domyślny używany przez następujące HttpContext
metody rozszerzenia uwierzytelniania:
Ustawienie ustawienia aplikacji na CookieAuthenticationDefaults.AuthenticationScheme ("Pliki cookie") powoduje skonfigurowanie aplikacji DefaultScheme
do używania plików cookie jako domyślnego schematu dla tych metod rozszerzeń. Ustawienie ustawienia aplikacji DefaultChallengeScheme na GoogleDefaults.AuthenticationScheme wartość ("Google") konfiguruje aplikację tak, aby używała google jako schematu domyślnego dla wywołań metody ChallengeAsync
. DefaultChallengeScheme
DefaultScheme
zastępuje . Zobacz AuthenticationOptions , aby uzyskać więcej właściwości, które zastępują DefaultScheme
podczas ustawiania.
W Startup.Configure
pliku wywołaj metodę UseAuthentication i UseAuthorization między wywołaniem UseRouting i UseEndpoints. Ta kombinacja oprogramowania pośredniczącego HttpContext.User ustawia właściwość i uruchamia oprogramowanie pośredniczące autoryzacji dla żądań:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
Aby dowiedzieć się więcej na temat schematów uwierzytelniania, zobacz Pojęcia dotyczące uwierzytelniania. Aby dowiedzieć się więcej na temat cookie uwierzytelniania, zobacz Używanie cookie uwierzytelniania bez ASP.NET Core Identity.
Stosowanie autoryzacji
Przetestuj konfigurację uwierzytelniania aplikacji, stosując atrybut [Authorize] do kontrolera, akcji lub strony. Następujący kod ogranicza dostęp do strony do Privacy użytkowników, którzy zostali uwierzytelnieni:
[Authorize]
public class PrivacyModel : PageModel
{
}
Wyloguj się
Aby wylogować bieżącego użytkownika i usunąć go cookie, wywołaj metodę SignOutAsync. Poniższy kod dodaje procedurę Logout
obsługi strony do strony Indeks :
public class IndexModel : PageModel
{
public async Task<IActionResult> OnPostLogoutAsync()
{
await HttpContext.SignOutAsync();
return RedirectToPage();
}
}
Zwróć uwagę, że wywołanie metody SignOutAsync
nie określa schematu uwierzytelniania. DefaultScheme
CookieAuthenticationDefaults.AuthenticationScheme
Aplikacja jest używana jako rezerwa.