Omówienie uwierzytelniania ASP.NET Core

Autor: Mike Rousos

Uwierzytelnianie to proces określania tożsamości użytkownika. Autoryzacja to proces określania, czy użytkownik ma dostęp do zasobu. W ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez middleware. 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 AddAuthentication lub AddJwtBearer) po wywołaniu metody AddCookie. 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 programy obsługi dla cookie schematów uwierzytelniania elementu nośnego i JWT elementu nośnego:

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 cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład w przypadku używania ASP.NET Core IdentityAddAuthentication metoda 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 w oparciu o niego 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 schematu authenticationScheme i nie znaleziono domyślnego schematu 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ć automatyczne używanie schematu pojedynczego uwierzytelniania jako DefaultScheme, wywołaj metodę AppContext.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 umożliwiające konfigurowanie 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.

Moduł obsługi uwierzytelniania

Obsługiwacz uwierzytelniania:

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

  • Skonstruuj obiekty AuthenticationTicket reprezentujące tożsamość użytkownika w przypadku pomyślnego uwierzytelnienia.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • Istnieją metody kwestionowania i zakazywania działań, gdy użytkownicy próbują uzyskać dostęp do zasobów.
    • Nie mają uprawnień do dostępu (zabronione).
    • Gdy są niezweryfikowani (bez autoryzacji).

RemoteAuthenticationHandler<TOptions> Vs 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 do komponentu CallbackPath zdefiniowanego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. OAuth 2.0 i OIDC używają tego wzorca. JWT pliki cookie nie, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i 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 schematu uwierzytelniania jest odpowiedzialna za konstruowanie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca AuthenticateResult wskazującą, czy uwierzytelnianie zakończyło się pomyślnie, a jeśli tak, 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.
  • JWT Schemat elementu nośnego deserializacji i weryfikacji tokenu elementu nośnego JWT w celu skonstruowania tożsamości użytkownika.

Zadanie

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. Autoryzacja wywołuje wyzwanie przy użyciu określonych schematów uwierzytelniania lub wartość domyślną, jeśli żadna z nich nie jest określona. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • JWT Schemat elementu nośnego zwraca wynik 401 z nagłówkiemwww-authenticate: bearer.

Akcja wyzwania powinna poinformować użytkownika, jakiego mechanizmu uwierzytelniania użyć do access żądanego zasobu.

Zabraniać

Akcja zabroniona schematu uwierzytelniania jest wywoływana przez autoryzację, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, do którego nie ma uprawnień. Zobacz: ForbidAsync. Przykłady zabronionych działań przy uwierzytelnianiu obejmują:

  • Schemat uwierzytelniania cookie, który przekierowuje użytkownika na stronę, która informuje o zabronieniu dostępu.
  • JWT Schemat elementu nośnego zwraca wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowuje do strony, na której użytkownik może zażądać dostępu do zasobu.

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

  • Zostali uwierzytelnieni.
  • Nie mogą uzyskać dostępu do żądanego zasobu.

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

Dostawcy uwierzytelniania dla każdej instancji

ASP.NET Core nie ma wbudowanego rozwiązania do uwierzytelniania wielodostępnego. Chociaż klienci mogą pisać jeden przy użyciu wbudowanych funkcji, zalecamy klientom rozważenie Orchard CoreABP Framework lub Finbuckle.MultiTenant na potrzeby uwierzytelniania wielodostępnego.

Orchard Core jest:

  • Platforma aplikacji typu open source, modułowa i wielodostępna utworzona z ASP.NET Core.
  • System zarządzania zawartością (CMS) opracowany na bazie tej platformy aplikacji.

Zobacz Orchard Core w repozytorium, aby zobaczyć przykład dostawców uwierzytelniania dla każdego najemcy.

Platforma ABP Framework obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, architekturę zorientowaną na domenę oraz wielodzierżawność. Zobacz źródło struktury ABP w GitHub.

Finbuckle.MultiTenant:

  • Otwarty kod źródłowy
  • Zapewnia rozwiązywanie problemów z dzierżawcą
  • Lekki i wydajny
  • Zapewnia izolację danych
  • Konfiguruj indywidualnie zachowanie aplikacji dla każdego najemcy

Dodatkowe zasoby

Autor: Mike Rousos

Uwierzytelnianie to proces określania tożsamości użytkownika. Autoryzacja to proces określania, czy użytkownik ma dostęp do zasobu. W ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez middleware. 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 AddAuthentication lub AddJwtBearer) po wywołaniu metody AddCookie. 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 programy obsługi dla cookie schematów uwierzytelniania elementu nośnego i JWT elementu nośnego:

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 cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład w przypadku używania ASP.NET Core IdentityAddAuthentication metoda 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 w oparciu o niego 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 schematu authenticationScheme i nie znaleziono domyślnego schematu 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 umożliwiające konfigurowanie 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.

Moduł obsługi uwierzytelniania

Obsługiwacz uwierzytelniania:

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

  • Skonstruuj obiekty AuthenticationTicket reprezentujące tożsamość użytkownika w przypadku pomyślnego uwierzytelnienia.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • Istnieją metody kwestionowania i zakazywania działań, gdy użytkownicy próbują uzyskać dostęp do zasobów.
    • Nie mają uprawnień do dostępu (zabronione).
    • Gdy są niezweryfikowani (bez autoryzacji).

RemoteAuthenticationHandler<TOptions> Vs 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 do komponentu CallbackPath zdefiniowanego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. OAuth 2.0 i OIDC używają tego wzorca. JWT pliki cookie nie, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i 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 schematu uwierzytelniania jest odpowiedzialna za konstruowanie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca AuthenticateResult wskazującą, czy uwierzytelnianie zakończyło się pomyślnie, a jeśli tak, 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.
  • JWT Schemat elementu nośnego deserializacji i weryfikacji tokenu elementu nośnego JWT w celu skonstruowania tożsamości użytkownika.

Zadanie

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. Autoryzacja wywołuje wyzwanie przy użyciu określonych schematów uwierzytelniania lub wartość domyślną, jeśli żadna z nich nie jest określona. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • JWT Schemat elementu nośnego zwraca wynik 401 z nagłówkiemwww-authenticate: bearer.

Akcja wyzwania powinna poinformować użytkownika, jakiego mechanizmu uwierzytelniania użyć do access żądanego zasobu.

Zabraniać

Akcja zabroniona schematu uwierzytelniania jest wywoływana przez autoryzację, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, do którego nie ma uprawnień. Zobacz: ForbidAsync. Przykłady zabronionych działań przy uwierzytelnianiu obejmują:

  • Schemat uwierzytelniania cookie, który przekierowuje użytkownika na stronę, która informuje o zabronieniu dostępu.
  • JWT Schemat elementu nośnego zwraca wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowuje do strony, na której użytkownik może zażądać dostępu do zasobu.

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

  • Zostali uwierzytelnieni.
  • Nie mogą uzyskać dostępu do żądanego zasobu.

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

Dostawcy uwierzytelniania dla każdej instancji

ASP.NET Core nie ma wbudowanego rozwiązania do uwierzytelniania wielodostępnego. Chociaż klienci mogą pisać je przy użyciu wbudowanych funkcji, zalecamy, aby klienci rozważyli Orchard Core lub ABP Framework na potrzeby uwierzytelniania wielodostępnego.

Orchard Core jest:

  • Platforma aplikacji typu open source, modułowa i wielodostępna utworzona z ASP.NET Core.
  • System zarządzania zawartością (CMS) opracowany na bazie tej platformy aplikacji.

Zobacz Orchard Core w repozytorium, aby zobaczyć przykład dostawców uwierzytelniania dla każdego najemcy.

Platforma ABP Framework obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, architekturę zorientowaną na domenę oraz wielodzierżawność. Zobacz źródło struktury ABP w GitHub.

Dodatkowe zasoby

Autor: Mike Rousos

Uwierzytelnianie to proces określania tożsamości użytkownika. Autoryzacja to proces określania, czy użytkownik ma dostęp do zasobu. W ASP.NET Core uwierzytelnianie jest obsługiwane przez usługę uwierzytelniania IAuthenticationService, która jest używana przez middleware. 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 AddAuthentication lub AddJwtBearer) po wywołaniu metody AddCookie. 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 programy obsługi dla cookie schematów uwierzytelniania elementu nośnego i JWT elementu nośnego:

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 cookie przez określenie jego nazwy (domyślnie CookieAuthenticationDefaults.AuthenticationScheme, chociaż przy wywołaniu AddCookie można podać inną nazwę).

W niektórych przypadkach metoda AddAuthentication jest automatycznie wywoływana przez inne metody rozszerzeń. Na przykład w przypadku używania ASP.NET Core IdentityAddAuthentication metoda 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 UseAuthentication musi zostać wykonane:

  • Po wykonaniu UseRouting, aby informacje o trasie były dostępne do podejmowania decyzji uwierzytelniających.
  • 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 w oparciu o niego 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 schematu authenticationScheme i nie znaleziono domyślnego schematu 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 umożliwiające konfigurowanie 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.

Moduł obsługi uwierzytelniania

Obsługiwacz uwierzytelniania:

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

  • Skonstruuj obiekty AuthenticationTicket reprezentujące tożsamość użytkownika w przypadku pomyślnego uwierzytelnienia.
  • Zwraca informację „brak wyniku” lub „niepowodzenie”, jeśli uwierzytelnianie nie powiedzie się.
  • Istnieją metody kwestionowania i zakazywania działań, gdy użytkownicy próbują uzyskać dostęp do zasobów.
    • Nie mają uprawnień do dostępu (zabronione).
    • Gdy są niezweryfikowani (bez autoryzacji).

RemoteAuthenticationHandler<TOptions> Vs 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 do komponentu CallbackPath zdefiniowanego przez procedurę obsługi. Procedura obsługi kończy etap uwierzytelniania, używając informacji przekazanych do ścieżki wywołania zwrotnego HandleRemoteAuthenticateAsync. OAuth 2.0 i OIDC używają tego wzorca. JWT pliki cookie nie, ponieważ mogą bezpośrednio używać nagłówka elementu nośnego i 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 schematu uwierzytelniania jest odpowiedzialna za konstruowanie tożsamości użytkownika na podstawie kontekstu żądania. Zwraca AuthenticateResult wskazującą, czy uwierzytelnianie zakończyło się pomyślnie, a jeśli tak, 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.
  • JWT Schemat elementu nośnego deserializacji i weryfikacji tokenu elementu nośnego JWT w celu skonstruowania tożsamości użytkownika.

Zadanie

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. Autoryzacja wywołuje wyzwanie przy użyciu określonych schematów uwierzytelniania lub wartość domyślną, jeśli żadna z nich nie jest określona. Zobacz: ChallengeAsync. Przykłady wezwań do uwierzytelnienia obejmują:

  • Schemat uwierzytelniania z użyciem plików cookie przekierowujący użytkownika na stronę logowania.
  • JWT Schemat elementu nośnego zwraca wynik 401 z nagłówkiemwww-authenticate: bearer.

Akcja wyzwania powinna poinformować użytkownika, jakiego mechanizmu uwierzytelniania użyć do access żądanego zasobu.

Zabraniać

Akcja zabroniona schematu uwierzytelniania jest wywoływana przez autoryzację, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, do którego nie ma uprawnień. Zobacz: ForbidAsync. Przykłady zabronionych działań przy uwierzytelnianiu obejmują:

  • Schemat uwierzytelniania cookie, który przekierowuje użytkownika na stronę, która informuje o zabronieniu dostępu.
  • JWT Schemat elementu nośnego zwraca wynik 403.
  • Niestandardowy schemat uwierzytelniania przekierowuje do strony, na której użytkownik może zażądać dostępu do zasobu.

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

  • Zostali uwierzytelnieni.
  • Nie mogą uzyskać dostępu do żądanego zasobu.

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

Dostawcy uwierzytelniania dla każdej instancji

platforma ASP.NET Core nie ma wbudowanego rozwiązania do uwierzytelniania wielodostępnego. Chociaż klienci mogą pisać aplikację z uwierzytelnianiem wielodostępnym, zalecamy użycie jednej z następujących platform aplikacji ASP.NET Core, które obsługują uwierzytelnianie wielodostępne.

Orchard Core to platforma aplikacji typu open source, modułowa i wielodostępna utworzona z ASP.NET Core, która udostępnia również system zarządzania zawartością (CMS). Zobacz Orchard Core w repozytorium, aby zobaczyć przykład dostawców uwierzytelniania dla każdego najemcy.

Struktura ABP obsługuje różne wzorce architektury, w tym modułowość, mikrousługi, projektowanie oparte na domenie i wielodostępność. Zobacz źródło struktury ABP w GitHub.

Dodatkowe zasoby