Omówienie uwierzytelniania na platformie ASP.NET Core

Autor: Mike Rousos

Uwierzytelnianie to proces ustalania tożsamości użytkownika. Autoryzacja to proces ustalania, czy użytkownik ma dostęp do zasobu. Na platformie ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez oprogramowanie pośredniczące uwierzytelniania. Usługa uwierzytelniania używa zarejestrowanych procedur obsługi uwierzytelniania, aby wykonywać akcje związane z uwierzytelnianiem. Przykłady akcji związanych z uwierzytelnianiem obejmują:

  • Uwierzytelnianie użytkownika.
  • Odpowiadanie, gdy nieuwierzytelniony użytkownik próbuje uzyskać dostęp do ograniczonego zasobu.

Zarejestrowane procedury obsługi uwierzytelniania i ich opcje konfiguracji nazywane są „schematami”.

Schematy uwierzytelniania określa się przez zarejestrowanie usług uwierzytelniania w pliku Program.cs:

  • Przez wywołanie metody rozszerzenia specyficznej dla schematu (takiej jak AddJwtBearer lub AddCookie) po wywołaniu metody AddAuthentication. Te metody rozszerzeń używają metody AuthenticationBuilder.AddScheme do rejestrowania schematów z odpowiednimi ustawieniami.
  • Rzadziej, przez bezpośrednie wywołanie metody AuthenticationBuilder.AddScheme.

Na przykład następujący kod rejestruje usługi uwierzytelniania i procedury obsługi dla schematów uwierzytelniania opartych na plikach cookie i elementach nośnych JWT:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

W metodzie AddAuthentication parametr JwtBearerDefaults.AuthenticationScheme jest nazwą schematu, który ma być używany domyślnie, gdy nie zostanie zażądany określony schemat.

Jeśli są używane różne schematy, zasady autoryzacji (lub atrybuty autoryzacji) mogą określać schemat (lub schematy) uwierzytelniania, na którym bazują w celu uwierzytelniania użytkownika. W powyższym przykładzie mógłby zostać użyty schemat uwierzytelniania z użyciem plików cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu metody AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład podczas korzystania z funkcji ASP.NET Core Identity metoda AddAuthentication jest wywoływana wewnętrznie.

Oprogramowanie pośredniczące uwierzytelniania jest dodawane w pliku Program.cs przez wywołanie metody UseAuthentication. Wywołanie metody UseAuthentication rejestruje oprogramowanie pośredniczące, które używa wcześniej zarejestrowanych schematów uwierzytelniania. Wywołuj metodę UseAuthentication przed wszelkim oprogramowaniem pośredniczącym, które jest zależne od uwierzytelniania użytkowników.

Pojęcia dotyczące uwierzytelniania

Funkcja uwierzytelniania jest odpowiedzialna za dostarczenie obiektu ClaimsPrincipal, aby funkcja autoryzacji mogła na tej podstawie podejmować decyzje o uprawnieniach. Istnieje wiele metod opartych na schematach uwierzytelniania, dzięki czemu można wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń:

Jeśli jest zarejestrowany tylko jeden schemat uwierzytelniania, staje się schematem domyślnym. Jeśli zarejestrowano wiele schematów i nie określono schematu domyślnego, należy określić schemat w atrybucie autoryzacji, w przeciwnym razie zostanie zgłoszony następujący błąd:

InvalidOperationException: Nie podano elementu authenticationScheme i nie znaleziono elementu DefaultAuthenticateScheme. Schematy domyślne można ustawiać za pomocą metody AddAuthentication(string defaultScheme) lub AddAuthentication(Action<AuthenticationOptions> configureOptions).

DefaultScheme

W przypadku zarejestrowania tylko jednego schematu uwierzytelniania pojedynczy schemat uwierzytelniania:

Aby wyłączyć automatycznie przy użyciu schematu pojedynczego uwierzytelniania jako , wywołaj metodę DefaultSchemeAppContext.SetSwitch("Microsoft.AspNetCore.Authentication.SuppressAutoDefaultScheme").

Schemat uwierzytelniania

Schemat uwierzytelniania może wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń. Aby uzyskać więcej informacji, zobacz Autoryzacja za pomocą określonego schematu.

Schemat uwierzytelniania to nazwa związana z następującymi elementami:

  • Procedura obsługi uwierzytelniania.
  • Opcje do konfigurowania tego konkretnego wystąpienia procedury obsługi.

Schematy są przydatne jako mechanizm odwoływania się do zachowań dotyczących uwierzytelniania, wezwań i zabronień w skojarzonej procedurze obsługi. Na przykład zasady autoryzacji mogą używać nazw schematów w celu określenia, jaki schemat (lub schematy) uwierzytelniania ma być używany do uwierzytelniania użytkownika. Podczas konfigurowania uwierzytelniania często określa się domyślny schemat uwierzytelniania. Schemat domyślny jest używany, o ile zasób nie zażąda konkretnego schematu. Możliwe jest też:

  • Określanie różnych schematów domyślnych, które mają być używane na potrzeby akcji uwierzytelniania, wezwań i zabronień.
  • Łączenie wielu schematów w jeden przy użyciu schematów zasad.

Procedura obsługi uwierzytelniania

Procedura obsługi uwierzytelniania:

Na podstawie konfiguracji schematu uwierzytelniania i kontekstu przychodzącego żądania procedura obsługi uwierzytelniania:

  • Tworzy obiekty AuthenticationTicket reprezentujące tożsamość użytkownika, jeśli uwierzytelnianie powiedzie się.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • W przypadku próby uzyskania dostępu do zasobów należy zakazać akcji w przypadku próby uzyskania dostępu do zasobów przez użytkowników:
    • Nie mają oni autoryzacji dostępu (zabronienie).
    • Nie są oni uwierzytelnieni (wezwanie).

Klasa RemoteAuthenticationHandler<TOptions> a klasa AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions> to klasa uwierzytelniania, która wymaga etapu uwierzytelniania zdalnego. Po zakończeniu etapu uwierzytelniania zdalnego procedura obsługi wykonuje wywołanie zwrotne elementu CallbackPath ustawionego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. Protokoły OAuth 2.0 i OIDC używają tego wzorca. Protokół JWT i funkcja plików cookie nie robią tego, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i plików cookie do uwierzytelniania. Dostawca hostowany zdalnie w tym przypadku:

  • Jest dostawcą uwierzytelniania.
  • Przykłady to Facebook, Twitter, Google, Microsoft i każdy inny dostawca OIDC, który obsługuje uwierzytelnianie użytkowników za pomocą mechanizmu procedur obsługi.

Uwierzytelnij

Akcja uwierzytelniania w schemacie uwierzytelniania jest odpowiedzialna za tworzenie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca ona obiekt AuthenticateResult wskazujący, czy uwierzytelnianie powiodło się, a jeśli tak, zwraca tożsamość użytkownika w bilecie uwierzytelniania. Zobacz: AuthenticateAsync. Przykłady uwierzytelniania obejmują:

  • Schemat uwierzytelniania cookie tworzący tożsamość użytkownika z plików cookie.
  • Schemat z użyciem elementów nośnych JWT deserializujący i weryfikujący token elementu nośnego JWT w celu utworzenia tożsamości użytkownika.

Wyzwanie

Wezwanie do uwierzytelnienia jest wywoływane przez funkcję autoryzacji, gdy nieuwierzytelniony użytkownik żąda punktu końcowego, który wymaga uwierzytelnienia. Wezwanie do uwierzytelnienia jest wysyłane na przykład wtedy, gdy anonimowy użytkownik żąda dostępu do zastrzeżonego zasobu lub używa linku logowania. Funkcja autoryzacji wywołuje wezwanie przy użyciu określonych schematów uwierzytelniania lub schematu domyślnego, jeśli nie określono żadnego schematu. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 401 z nagłówkiem www-authenticate: bearer.

Akcja wezwania powinna powiadamiać użytkownika, jakiego mechanizmu uwierzytelniania należy użyć, aby uzyskać dostęp do żądanego zasobu.

Zabranianie

Akcja zabronienia w schemacie uwierzytelniania jest wywoływana przez funkcję autoryzacji, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, w przypadku którego nie ma zezwolenia. Zobacz: ForbidAsync. Przykłady zabraniania podczas uwierzytelniania obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę informującą o zabronieniu dostępu.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowujący do strony, na której użytkownik może zażądać dostępu do zasobu.

Akcja zabronienia może przekazać użytkownikowi informacje:

  • Został on uwierzytelniony.
  • Nie może on uzyskać dostępu do żądanego zasobu.

Skorzystaj z następujących linków, aby poznać różnice między wyzwaniem i zabronieniem:

Dostawcy uwierzytelniania w ramach dzierżawy

Platforma ASP.NET Core nie ma wbudowanego rozwiązania dla uwierzytelniania w wielu dzierżawach. Chociaż klienci mogą napisać jeden przy użyciu wbudowanych funkcji, zalecamy klientom rozważenie uwierzytelniania Sad Core, ABP Framework lub Finbuckle.MultiTenant na potrzeby uwierzytelniania wielodostępnego.

Platforma Orchard Core to:

  • Modularna platforma aplikacji typu open source obsługująca wiele dzierżaw i opracowana przy użyciu platformy ASP.NET Core.
  • System zarządzania zawartością (CMS) opracowany na bazie tej platformy aplikacji.

Zobacz kod źródłowy platformy Orchard Core, aby uzyskać przykład dostawców uwierzytelniania w ramach dzierżawy.

Platforma ABP Framework obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, projektowanie oparte na domenie oraz wiele dzierżaw. Zobacz Kod źródłowy platformy ABP Framework w serwisie GitHub.

Finbuckle.MultiTenant:

  • Technologia open source
  • Zapewnia rozpoznawanie dzierżawy
  • Lekki
  • Zapewnia izolację danych
  • Konfigurowanie zachowania aplikacji unikatowo dla każdej dzierżawy

Dodatkowe zasoby

Autor: Mike Rousos

Uwierzytelnianie to proces ustalania tożsamości użytkownika. Autoryzacja to proces ustalania, czy użytkownik ma dostęp do zasobu. Na platformie ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez oprogramowanie pośredniczące uwierzytelniania. Usługa uwierzytelniania używa zarejestrowanych procedur obsługi uwierzytelniania, aby wykonywać akcje związane z uwierzytelnianiem. Przykłady akcji związanych z uwierzytelnianiem obejmują:

  • Uwierzytelnianie użytkownika.
  • Odpowiadanie, gdy nieuwierzytelniony użytkownik próbuje uzyskać dostęp do ograniczonego zasobu.

Zarejestrowane procedury obsługi uwierzytelniania i ich opcje konfiguracji nazywane są „schematami”.

Schematy uwierzytelniania określa się przez zarejestrowanie usług uwierzytelniania w pliku Program.cs:

  • Przez wywołanie metody rozszerzenia specyficznej dla schematu (takiej jak AddJwtBearer lub AddCookie) po wywołaniu metody AddAuthentication. Te metody rozszerzeń używają metody AuthenticationBuilder.AddScheme do rejestrowania schematów z odpowiednimi ustawieniami.
  • Rzadziej, przez bezpośrednie wywołanie metody AuthenticationBuilder.AddScheme.

Na przykład następujący kod rejestruje usługi uwierzytelniania i procedury obsługi dla schematów uwierzytelniania opartych na plikach cookie i elementach nośnych JWT:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

W metodzie AddAuthentication parametr JwtBearerDefaults.AuthenticationScheme jest nazwą schematu, który ma być używany domyślnie, gdy nie zostanie zażądany określony schemat.

Jeśli są używane różne schematy, zasady autoryzacji (lub atrybuty autoryzacji) mogą określać schemat (lub schematy) uwierzytelniania, na którym bazują w celu uwierzytelniania użytkownika. W powyższym przykładzie mógłby zostać użyty schemat uwierzytelniania z użyciem plików cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu metody AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład podczas korzystania z funkcji ASP.NET Core Identity metoda AddAuthentication jest wywoływana wewnętrznie.

Oprogramowanie pośredniczące uwierzytelniania jest dodawane w pliku Program.cs przez wywołanie metody UseAuthentication. Wywołanie metody UseAuthentication rejestruje oprogramowanie pośredniczące, które używa wcześniej zarejestrowanych schematów uwierzytelniania. Wywołuj metodę UseAuthentication przed wszelkim oprogramowaniem pośredniczącym, które jest zależne od uwierzytelniania użytkowników.

Pojęcia dotyczące uwierzytelniania

Funkcja uwierzytelniania jest odpowiedzialna za dostarczenie obiektu ClaimsPrincipal, aby funkcja autoryzacji mogła na tej podstawie podejmować decyzje o uprawnieniach. Istnieje wiele metod opartych na schematach uwierzytelniania, dzięki czemu można wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń:

Nie ma automatycznego sondowania schematów. Jeśli schemat domyślny nie zostanie określony, należy określić schemat w atrybucie Authorize. W przeciwnym razie zostanie zgłoszony następujący błąd:

InvalidOperationException: Nie podano elementu authenticationScheme i nie znaleziono elementu DefaultAuthenticateScheme. Schematy domyślne można ustawiać za pomocą metody AddAuthentication(string defaultScheme) lub AddAuthentication(Action<AuthenticationOptions> configureOptions).

Schemat uwierzytelniania

Schemat uwierzytelniania może wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń. Aby uzyskać więcej informacji, zobacz Autoryzacja za pomocą określonego schematu.

Schemat uwierzytelniania to nazwa związana z następującymi elementami:

  • Procedura obsługi uwierzytelniania.
  • Opcje do konfigurowania tego konkretnego wystąpienia procedury obsługi.

Schematy są przydatne jako mechanizm odwoływania się do zachowań dotyczących uwierzytelniania, wezwań i zabronień w skojarzonej procedurze obsługi. Na przykład zasady autoryzacji mogą używać nazw schematów w celu określenia, jaki schemat (lub schematy) uwierzytelniania ma być używany do uwierzytelniania użytkownika. Podczas konfigurowania uwierzytelniania często określa się domyślny schemat uwierzytelniania. Schemat domyślny jest używany, o ile zasób nie zażąda konkretnego schematu. Możliwe jest też:

  • Określanie różnych schematów domyślnych, które mają być używane na potrzeby akcji uwierzytelniania, wezwań i zabronień.
  • Łączenie wielu schematów w jeden przy użyciu schematów zasad.

Procedura obsługi uwierzytelniania

Procedura obsługi uwierzytelniania:

Na podstawie konfiguracji schematu uwierzytelniania i kontekstu przychodzącego żądania procedura obsługi uwierzytelniania:

  • Tworzy obiekty AuthenticationTicket reprezentujące tożsamość użytkownika, jeśli uwierzytelnianie powiedzie się.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • W przypadku próby uzyskania dostępu do zasobów należy zakazać akcji w przypadku próby uzyskania dostępu do zasobów przez użytkowników:
    • Nie mają oni autoryzacji dostępu (zabronienie).
    • Nie są oni uwierzytelnieni (wezwanie).

Klasa RemoteAuthenticationHandler<TOptions> a klasa AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions> to klasa uwierzytelniania, która wymaga etapu uwierzytelniania zdalnego. Po zakończeniu etapu uwierzytelniania zdalnego procedura obsługi wykonuje wywołanie zwrotne elementu CallbackPath ustawionego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. Protokoły OAuth 2.0 i OIDC używają tego wzorca. Protokół JWT i funkcja plików cookie nie robią tego, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i plików cookie do uwierzytelniania. Dostawca hostowany zdalnie w tym przypadku:

  • Jest dostawcą uwierzytelniania.
  • Przykłady to Facebook, Twitter, Google, Microsoft i każdy inny dostawca OIDC, który obsługuje uwierzytelnianie użytkowników za pomocą mechanizmu procedur obsługi.

Uwierzytelnij

Akcja uwierzytelniania w schemacie uwierzytelniania jest odpowiedzialna za tworzenie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca ona obiekt AuthenticateResult wskazujący, czy uwierzytelnianie powiodło się, a jeśli tak, zwraca tożsamość użytkownika w bilecie uwierzytelniania. Zobacz: AuthenticateAsync. Przykłady uwierzytelniania obejmują:

  • Schemat uwierzytelniania cookie tworzący tożsamość użytkownika z plików cookie.
  • Schemat z użyciem elementów nośnych JWT deserializujący i weryfikujący token elementu nośnego JWT w celu utworzenia tożsamości użytkownika.

Wyzwanie

Wezwanie do uwierzytelnienia jest wywoływane przez funkcję autoryzacji, gdy nieuwierzytelniony użytkownik żąda punktu końcowego, który wymaga uwierzytelnienia. Wezwanie do uwierzytelnienia jest wysyłane na przykład wtedy, gdy anonimowy użytkownik żąda dostępu do zastrzeżonego zasobu lub używa linku logowania. Funkcja autoryzacji wywołuje wezwanie przy użyciu określonych schematów uwierzytelniania lub schematu domyślnego, jeśli nie określono żadnego schematu. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 401 z nagłówkiem www-authenticate: bearer.

Akcja wezwania powinna powiadamiać użytkownika, jakiego mechanizmu uwierzytelniania należy użyć, aby uzyskać dostęp do żądanego zasobu.

Zabranianie

Akcja zabronienia w schemacie uwierzytelniania jest wywoływana przez funkcję autoryzacji, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, w przypadku którego nie ma zezwolenia. Zobacz: ForbidAsync. Przykłady zabraniania podczas uwierzytelniania obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę informującą o zabronieniu dostępu.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowujący do strony, na której użytkownik może zażądać dostępu do zasobu.

Akcja zabronienia może przekazać użytkownikowi informacje:

  • Został on uwierzytelniony.
  • Nie może on uzyskać dostępu do żądanego zasobu.

Skorzystaj z następujących linków, aby poznać różnice między wyzwaniem i zabronieniem:

Dostawcy uwierzytelniania w ramach dzierżawy

Platforma ASP.NET Core nie ma wbudowanego rozwiązania dla uwierzytelniania w wielu dzierżawach. Chociaż klienci mogą je opracować przy użyciu wbudowanych funkcji, zalecamy klientom rozważenie użycia platformy Orchard Core lub ABP Framework do uwierzytelniania w wielu dzierżawach.

Platforma Orchard Core to:

  • Modularna platforma aplikacji typu open source obsługująca wiele dzierżaw i opracowana przy użyciu platformy ASP.NET Core.
  • System zarządzania zawartością (CMS) opracowany na bazie tej platformy aplikacji.

Zobacz kod źródłowy platformy Orchard Core, aby uzyskać przykład dostawców uwierzytelniania w ramach dzierżawy.

Platforma ABP Framework obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, projektowanie oparte na domenie oraz wiele dzierżaw. Zobacz Kod źródłowy platformy ABP Framework w serwisie GitHub.

Dodatkowe zasoby

Autor: Mike Rousos

Uwierzytelnianie to proces ustalania tożsamości użytkownika. Autoryzacja to proces ustalania, czy użytkownik ma dostęp do zasobu. Na platformie ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez oprogramowanie pośredniczące uwierzytelniania. Usługa uwierzytelniania używa zarejestrowanych procedur obsługi uwierzytelniania, aby wykonywać akcje związane z uwierzytelnianiem. Przykłady akcji związanych z uwierzytelnianiem obejmują:

  • Uwierzytelnianie użytkownika.
  • Odpowiadanie, gdy nieuwierzytelniony użytkownik próbuje uzyskać dostęp do ograniczonego zasobu.

Zarejestrowane procedury obsługi uwierzytelniania i ich opcje konfiguracji nazywane są „schematami”.

Schematy uwierzytelniania określa się przez zarejestrowanie usług uwierzytelniania w pliku Startup.ConfigureServices:

  • Przez wywołanie metody rozszerzenia specyficznej dla schematu (takiej jak AddJwtBearer lub AddCookie) po wywołaniu metody AddAuthentication. Te metody rozszerzeń używają metody AuthenticationBuilder.AddScheme do rejestrowania schematów z odpowiednimi ustawieniami.
  • Rzadziej, przez bezpośrednie wywołanie metody AuthenticationBuilder.AddScheme.

Na przykład następujący kod rejestruje usługi uwierzytelniania i procedury obsługi dla schematów uwierzytelniania opartych na plikach cookie i elementach nośnych JWT:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => Configuration.Bind("CookieSettings", options));

W metodzie AddAuthentication parametr JwtBearerDefaults.AuthenticationScheme jest nazwą schematu, który ma być używany domyślnie, gdy nie zostanie zażądany określony schemat.

Jeśli są używane różne schematy, zasady autoryzacji (lub atrybuty autoryzacji) mogą określać schemat (lub schematy) uwierzytelniania, na którym bazują w celu uwierzytelniania użytkownika. W powyższym przykładzie mógłby zostać użyty schemat uwierzytelniania z użyciem plików cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu metody AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład podczas korzystania z funkcji ASP.NET Core Identity metoda AddAuthentication jest wywoływana wewnętrznie.

Oprogramowanie pośredniczące uwierzytelniania jest dodawane w pliku Startup.Configure przez wywołanie metody UseAuthentication. Wywołanie metody UseAuthentication rejestruje oprogramowanie pośredniczące, które używa wcześniej zarejestrowanych schematów uwierzytelniania. Wywołuj metodę UseAuthentication przed wszelkim oprogramowaniem pośredniczącym, które jest zależne od uwierzytelniania użytkowników. W przypadku korzystania z routingu punktów końcowych wywołanie metody UseAuthentication musi znajdować się:

  • Po metodzie UseRouting, aby informacje o trasach były dostępne do podejmowania decyzji dotyczących uwierzytelniania.
  • Przed metodą UseEndpoints, aby użytkownicy byli uwierzytelniani przed uzyskaniem dostępu do punktów końcowych.

Pojęcia dotyczące uwierzytelniania

Funkcja uwierzytelniania jest odpowiedzialna za dostarczenie obiektu ClaimsPrincipal, aby funkcja autoryzacji mogła na tej podstawie podejmować decyzje o uprawnieniach. Istnieje wiele metod opartych na schematach uwierzytelniania, dzięki czemu można wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń:

Nie ma automatycznego sondowania schematów. Jeśli schemat domyślny nie zostanie określony, należy określić schemat w atrybucie Authorize. W przeciwnym razie zostanie zgłoszony następujący błąd:

InvalidOperationException: Nie podano elementu authenticationScheme i nie znaleziono elementu DefaultAuthenticateScheme. Schematy domyślne można ustawiać za pomocą metody AddAuthentication(string defaultScheme) lub AddAuthentication(Action<AuthenticationOptions> configureOptions).

Schemat uwierzytelniania

Schemat uwierzytelniania może wybrać, która procedura obsługi uwierzytelniania jest odpowiedzialna za generowanie właściwego zestawu oświadczeń. Aby uzyskać więcej informacji, zobacz Autoryzacja za pomocą określonego schematu.

Schemat uwierzytelniania to nazwa związana z następującymi elementami:

  • Procedura obsługi uwierzytelniania.
  • Opcje do konfigurowania tego konkretnego wystąpienia procedury obsługi.

Schematy są przydatne jako mechanizm odwoływania się do zachowań dotyczących uwierzytelniania, wezwań i zabronień w skojarzonej procedurze obsługi. Na przykład zasady autoryzacji mogą używać nazw schematów w celu określenia, jaki schemat (lub schematy) uwierzytelniania ma być używany do uwierzytelniania użytkownika. Podczas konfigurowania uwierzytelniania często określa się domyślny schemat uwierzytelniania. Schemat domyślny jest używany, o ile zasób nie zażąda konkretnego schematu. Możliwe jest też:

  • Określanie różnych schematów domyślnych, które mają być używane na potrzeby akcji uwierzytelniania, wezwań i zabronień.
  • Łączenie wielu schematów w jeden przy użyciu schematów zasad.

Procedura obsługi uwierzytelniania

Procedura obsługi uwierzytelniania:

Na podstawie konfiguracji schematu uwierzytelniania i kontekstu przychodzącego żądania procedura obsługi uwierzytelniania:

  • Tworzy obiekty AuthenticationTicket reprezentujące tożsamość użytkownika, jeśli uwierzytelnianie powiedzie się.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • W przypadku próby uzyskania dostępu do zasobów należy zakazać akcji w przypadku próby uzyskania dostępu do zasobów przez użytkowników:
    • Nie mają oni autoryzacji dostępu (zabronienie).
    • Nie są oni uwierzytelnieni (wezwanie).

Klasa RemoteAuthenticationHandler<TOptions> a klasa AuthenticationHandler<TOptions>

RemoteAuthenticationHandler<TOptions> to klasa uwierzytelniania, która wymaga etapu uwierzytelniania zdalnego. Po zakończeniu etapu uwierzytelniania zdalnego procedura obsługi wykonuje wywołanie zwrotne elementu CallbackPath ustawionego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. Protokoły OAuth 2.0 i OIDC używają tego wzorca. Protokół JWT i funkcja plików cookie nie robią tego, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i plików cookie do uwierzytelniania. Dostawca hostowany zdalnie w tym przypadku:

  • Jest dostawcą uwierzytelniania.
  • Przykłady to Facebook, Twitter, Google, Microsoft i każdy inny dostawca OIDC, który obsługuje uwierzytelnianie użytkowników za pomocą mechanizmu procedur obsługi.

Uwierzytelnij

Akcja uwierzytelniania w schemacie uwierzytelniania jest odpowiedzialna za tworzenie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca ona obiekt AuthenticateResult wskazujący, czy uwierzytelnianie powiodło się, a jeśli tak, zwraca tożsamość użytkownika w bilecie uwierzytelniania. Zobacz: AuthenticateAsync. Przykłady uwierzytelniania obejmują:

  • Schemat uwierzytelniania cookie tworzący tożsamość użytkownika z plików cookie.
  • Schemat z użyciem elementów nośnych JWT deserializujący i weryfikujący token elementu nośnego JWT w celu utworzenia tożsamości użytkownika.

Wyzwanie

Wezwanie do uwierzytelnienia jest wywoływane przez funkcję autoryzacji, gdy nieuwierzytelniony użytkownik żąda punktu końcowego, który wymaga uwierzytelnienia. Wezwanie do uwierzytelnienia jest wysyłane na przykład wtedy, gdy anonimowy użytkownik żąda dostępu do zastrzeżonego zasobu lub używa linku logowania. Funkcja autoryzacji wywołuje wezwanie przy użyciu określonych schematów uwierzytelniania lub schematu domyślnego, jeśli nie określono żadnego schematu. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 401 z nagłówkiem www-authenticate: bearer.

Akcja wezwania powinna powiadamiać użytkownika, jakiego mechanizmu uwierzytelniania należy użyć, aby uzyskać dostęp do żądanego zasobu.

Zabranianie

Akcja zabronienia w schemacie uwierzytelniania jest wywoływana przez funkcję autoryzacji, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, w przypadku którego nie ma zezwolenia. Zobacz: ForbidAsync. Przykłady zabraniania podczas uwierzytelniania obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę informującą o zabronieniu dostępu.
  • Schemat z użyciem elementów nośnych JWT zwracający wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowujący do strony, na której użytkownik może zażądać dostępu do zasobu.

Akcja zabronienia może przekazać użytkownikowi informacje:

  • Został on uwierzytelniony.
  • Nie może on uzyskać dostępu do żądanego zasobu.

Skorzystaj z następujących linków, aby poznać różnice między wyzwaniem i zabronieniem:

Dostawcy uwierzytelniania w ramach dzierżawy

Platforma ASP.NET Core nie ma wbudowanego rozwiązania dla uwierzytelniania w wielu dzierżawach. Chociaż klienci mogą opracowywać aplikacje z uwierzytelnianiem w wielu dzierżawach, zalecamy używanie jednej z następujących platform aplikacji ASP.NET Core, które obsługują uwierzytelnianie w wielu dzierżawach:

Orchard Core

Orchard Core. Zobacz kod źródłowy platformy Orchard Core, aby uzyskać przykład dostawców uwierzytelniania w ramach dzierżawy.

ABP Framework

Platforma ABP Framework obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, projektowanie oparte na domenie oraz wiele dzierżaw. Zobacz Kod źródłowy platformy ABP Framework w serwisie GitHub.

Dodatkowe zasoby