Omówienie uwierzytelniania ASP.NET CoreOverview of ASP.NET Core authentication

Według Jan RousosBy Mike Rousos

Uwierzytelnianie to proces określania tożsamości użytkownika.Authentication is the process of determining a user's identity. Autoryzacja to proces ustalania, czy użytkownik ma dostęp do zasobu.Authorization is the process of determining whether a user has access to a resource. W ASP.NET Core uwierzytelnianie jest obsługiwane przez IAuthenticationService program, który jest używany przez oprogramowanie pośrednicząceuwierzytelniania.In ASP.NET Core, authentication is handled by the IAuthenticationService, which is used by authentication middleware. Usługa uwierzytelniania używa zarejestrowanych programów obsługi uwierzytelniania do ukończenia akcji związanych z uwierzytelnianiem.The authentication service uses registered authentication handlers to complete authentication-related actions. Przykłady akcji związanych z uwierzytelnianiem obejmują:Examples of authentication-related actions include:

  • Uwierzytelnianie użytkownika.Authenticating a user.
  • Odpowiada, gdy nieuwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu z ograniczeniami.Responding when an unauthenticated user tries to access a restricted resource.

Zarejestrowane programy obsługi uwierzytelniania i ich opcje konfiguracji są nazywane "schematami".The registered authentication handlers and their configuration options are called "schemes".

Schematy uwierzytelniania są określane przez zarejestrowanie usług uwierzytelniania w programie Startup.ConfigureServices :Authentication schemes are specified by registering authentication services in Startup.ConfigureServices:

  • Wywołując metodę rozszerzenia specyficzną dla schematu po wywołaniu metody (np services.AddAuthentication AddJwtBearer AddCookie . lub, na przykład).By calling a scheme-specific extension method after a call to services.AddAuthentication (such as AddJwtBearer or AddCookie, for example). Te metody rozszerzające używają AuthenticationBuilder. AddSchema do rejestrowania schematów przy użyciu odpowiednich ustawień.These extension methods use AuthenticationBuilder.AddScheme to register schemes with appropriate settings.
  • Rzadziej, przez wywołanie AuthenticationBuilder. AddSchema bezpośrednio.Less commonly, by calling AuthenticationBuilder.AddScheme directly.

Na przykład poniższy kod rejestruje usługi uwierzytelniania i programy obsługi programu cookie oraz schematy uwierzytelniania okaziciela JWT:For example, the following code registers authentication services and handlers for cookie and JWT bearer authentication schemes:

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

AddAuthenticationParametr JwtBearerDefaults.AuthenticationScheme jest nazwą schematu, który ma być używany domyślnie, gdy określony schemat nie jest wymagany.The AddAuthentication parameter JwtBearerDefaults.AuthenticationScheme is the name of the scheme to use by default when a specific scheme isn't requested.

W przypadku użycia wielu schematów zasady autoryzacji (lub atrybuty autoryzacji) mogą określać schemat uwierzytelniania (lub schematy), od których zależą w celu uwierzytelnienia użytkownika.If multiple schemes are used, authorization policies (or authorization attributes) can specify the authentication scheme (or schemes) they depend on to authenticate the user. W powyższym przykładzie cookie schemat uwierzytelniania może być używany przez określenie jego nazwy ( CookieAuthenticationDefaults.AuthenticationScheme Domyślnie, chociaż przy wywoływaniu można podać inną nazwę AddCookie ).In the example above, the cookie authentication scheme could be used by specifying its name (CookieAuthenticationDefaults.AuthenticationScheme by default, though a different name could be provided when calling AddCookie).

W niektórych przypadkach wywołanie AddAuthentication jest wykonywane automatycznie przez inne metody rozszerzenia.In some cases, the call to AddAuthentication is automatically made by other extension methods. Na przykład podczas korzystania z ASP.NET Core Identity programu AddAuthentication jest wywoływana wewnętrznie.For example, when using ASP.NET Core Identity, AddAuthentication is called internally.

Oprogramowanie pośredniczące uwierzytelniania jest dodawane w programie Startup.Configure przez wywołanie UseAuthentication metody rozszerzenia w aplikacji IApplicationBuilder .The Authentication middleware is added in Startup.Configure by calling the UseAuthentication extension method on the app's IApplicationBuilder. Wywołanie UseAuthentication rejestruje oprogramowanie pośredniczące, które używa poprzednio zarejestrowanego schematu uwierzytelniania.Calling UseAuthentication registers the middleware which uses the previously registered authentication schemes. Wywołaj UseAuthentication przed każdym oprogramowanie pośredniczące zależne od użytkowników, którzy są uwierzytelniani.Call UseAuthentication before any middleware that depends on users being authenticated. W przypadku korzystania z routingu punktów końcowych wywołanie UseAuthentication musi być następujące:When using endpoint routing, the call to UseAuthentication must go:

  • Po UseRouting , tak aby informacje o trasie były dostępne na potrzeby podejmowania decyzji dotyczących uwierzytelniania.After UseRouting, so that route information is available for authentication decisions.
  • Wcześniej UseEndpoints , aby użytkownicy mieli uwierzytelnieni przed uzyskaniem dostępu do punktów końcowych.Before UseEndpoints, so that users are authenticated before accessing the endpoints.

Pojęcia związane z uwierzytelnianiemAuthentication Concepts

Schemat uwierzytelnianiaAuthentication scheme

Schematem uwierzytelniania jest nazwa, która odnosi się do:An authentication scheme is a name which corresponds to:

  • Procedura obsługi uwierzytelniania.An authentication handler.
  • Opcje konfigurowania określonego wystąpienia programu obsługi.Options for configuring that specific instance of the handler.

Schematy są przydatne jako mechanizm do odwoływania się do zachowań uwierzytelnianie, wyzwanie i Zabroń skojarzonej procedury obsługi.Schemes are useful as a mechanism for referring to the authentication, challenge, and forbid behaviors of the associated handler. Na przykład zasady autoryzacji mogą używać nazw schematów, aby określić, który schemat uwierzytelniania (lub schematy) powinien zostać użyty do uwierzytelnienia użytkownika.For example, an authorization policy can use scheme names to specify which authentication scheme (or schemes) should be used to authenticate the user. Podczas konfigurowania uwierzytelniania często można określić domyślny schemat uwierzytelniania.When configuring authentication, it's common to specify the default authentication scheme. Domyślny schemat jest używany, chyba że zasób żąda określonego schematu.The default scheme is used unless a resource requests a specific scheme. Możliwe jest również:It's also possible to:

  • Określ różne domyślne schematy do użycia w akcjach uwierzytelniania, wyzwania i zabraniania.Specify different default schemes to use for authenticate, challenge, and forbid actions.
  • Połącz wiele schematów przy użyciu schematów zasad.Combine multiple schemes into one using policy schemes.

Procedura obsługi uwierzytelnianiaAuthentication handler

Procedura obsługi uwierzytelniania:An authentication handler:

W oparciu o konfigurację schematu uwierzytelniania i kontekst żądania przychodzącego, programy obsługi uwierzytelniania:Based on the authentication scheme's configuration and the incoming request context, authentication handlers:

  • Konstruowanie AuthenticationTicket obiektów reprezentujących tożsamość użytkownika w przypadku pomyślnego uwierzytelnienia.Construct AuthenticationTicket objects representing the user's identity if authentication is successful.
  • Zwróć "Brak wyniku" lub "Niepowodzenie", jeśli uwierzytelnianie nie powiedzie się.Return 'no result' or 'failure' if authentication is unsuccessful.
  • Mają metody dla akcji wyzwania i Zabraniaj, gdy użytkownicy próbują uzyskać dostęp do zasobów:Have methods for challenge and forbid actions for when users attempt to access resources:
    • Dostęp do nich nie jest autoryzowany (Zabroń).They are unauthorized to access (forbid).
    • Gdy nie są uwierzytelniane (wyzwanie).When they are unauthenticated (challenge).

UwierzytelnianieAuthenticate

Akcja uwierzytelniania schematu uwierzytelniania jest odpowiedzialna za konstruowanie tożsamości użytkownika na podstawie kontekstu żądania.An authentication scheme's authenticate action is responsible for constructing the user's identity based on request context. Zwraca AuthenticateResult informację o tym, czy uwierzytelnianie zakończyło się pomyślnie, a jeśli tak, tożsamość użytkownika w biletu uwierzytelniania.It returns an AuthenticateResult indicating whether authentication was successful and, if so, the user's identity in an authentication ticket. Zobacz: AuthenticateAsync.See AuthenticateAsync. Przykłady uwierzytelniania obejmują:Authenticate examples include:

  • cookieSchemat uwierzytelniania, który konstruuje tożsamość użytkownika z cookie s.A cookie authentication scheme constructing the user's identity from cookies.
  • Schemat okaziciela JWT deserializacji i weryfikacji tokenu okaziciela JWT w celu utworzenia tożsamości użytkownika.A JWT bearer scheme deserializing and validating a JWT bearer token to construct the user's identity.

ZadanieChallenge

Wyzwanie uwierzytelniania jest wywoływane przez autoryzację, gdy nieuwierzytelniony użytkownik żąda punktu końcowego wymagającego uwierzytelniania.An authentication challenge is invoked by Authorization when an unauthenticated user requests an endpoint that requires authentication. Jest wystawiane wyzwanie uwierzytelniania, na przykład gdy użytkownik anonimowy żąda zasobu z ograniczeniami lub klika łącze logowania.An authentication challenge is issued, for example, when an anonymous user requests a restricted resource or clicks on a login link. Autoryzacja wywołuje wyzwanie przy użyciu określonych schematów uwierzytelniania lub wartość domyślną, jeśli nie została określona.Authorization invokes a challenge using the specified authentication scheme(s), or the default if none is specified. Zobacz: ChallengeAsync.See ChallengeAsync. Przykłady wyzwania uwierzytelniania obejmują:Authentication challenge examples include:

  • cookieSchemat uwierzytelniania przekierowuje użytkownika do strony logowania.A cookie authentication scheme redirecting the user to a login page.
  • Schemat okaziciela JWT zwracający wynik 401 z www-authenticate: bearer nagłówkiem.A JWT bearer scheme returning a 401 result with a www-authenticate: bearer header.

Akcja wyzwania powinna dać użytkownikowi informacje o mechanizmie uwierzytelniania używanym do uzyskiwania dostępu do żądanego zasobu.A challenge action should let the user know what authentication mechanism to use to access the requested resource.

UniemożliwiaForbid

Akcja zabraniania schematu uwierzytelniania jest wywoływana przez autoryzację, gdy uwierzytelniony użytkownik próbuje uzyskać dostęp do zasobu, do którego nie ma dostępu.An authentication scheme's forbid action is called by Authorization when an authenticated user attempts to access a resource they are not permitted to access. Zobacz: ForbidAsync.See ForbidAsync. Przykładem zabraniania uwierzytelniania są:Authentication forbid examples include:

  • cookieSchemat uwierzytelniania przekierowuje użytkownika do strony wskazującej dostęp był zabroniony.A cookie authentication scheme redirecting the user to a page indicating access was forbidden.
  • Schemat okaziciela JWT zwracający wynik 403.A JWT bearer scheme returning a 403 result.
  • Niestandardowy schemat uwierzytelniania przekierowuje do strony, na której użytkownik może zażądać dostępu do zasobu.A custom authentication scheme redirecting to a page where the user can request access to the resource.

Akcja Zabroń może pozwolić użytkownikowi na:A forbid action can let the user know:

  • Są uwierzytelniane.They are authenticated.
  • Nie mogą uzyskać dostępu do żądanego zasobu.They aren't permitted to access the requested resource.

Poniżej znajdują się linki dotyczące różnic między wyzwaniem i zabranianiem:See the following links for differences between challenge and forbid:

Dostawcy uwierzytelniania na dzierżawcęAuthentication providers per tenant

Platforma ASP.NET Core nie ma wbudowanego rozwiązania do uwierzytelniania wielodostępnego.ASP.NET Core framework does not have a built-in solution for multi-tenant authentication. Chociaż jest to możliwe, aby klienci mogli pisać jedną, przy użyciu wbudowanych funkcji, zalecamy, aby w tym celu przyjrzeć się klientom na rdzeń .While it's certainly possible for customers to write one, using the built-in features, we recommend customers to look into Orchard Core for this purpose.

Rdzeń sadu:Orchard Core is:

  • Modularna i wielodostępna platforma aplikacji Open Source skompilowana przy użyciu ASP.NET Core.An open-source modular and multi-tenant app framework built with ASP.NET Core.
  • System zarządzania zawartością (CMS) zbudowany na podstawie tej struktury aplikacji.A content management system (CMS) built on top of that app framework.

Zobacz podstawowe źródło sadu dla przykładu dostawców uwierzytelniania na dzierżawcę.See the Orchard Core source for an example of authentication providers per tenant.

Dodatkowe zasobyAdditional resources