ASP.NET Core 인증 개요Overview of ASP.NET Core authentication

Mike Rousos 작성By Mike Rousos

인증은 사용자 ID를 확인하는 프로세스입니다.Authentication is the process of determining a user's identity. 권한 부여는 사용자에게 리소스에 대한 액세스 권한이 있는지를 확인하는 프로세스입니다.Authorization is the process of determining whether a user has access to a resource. ASP.NET Core에서는 인증이 인증 미들웨어에서 사용되는 IAuthenticationService을(를) 사용하여 처리됩니다.In ASP.NET Core, authentication is handled by the IAuthenticationService, which is used by authentication middleware. 인증 서비스는 등록된 인증 처리기를 사용하여 인증 관련 작업을 완료합니다.The authentication service uses registered authentication handlers to complete authentication-related actions. 인증 관련 작업의 예는 다음과 같습니다.Examples of authentication-related actions include:

  • 사용자 인증.Authenticating a user.
  • 인증되지 않은 사용자가 제한된 리소스에 액세스하려고 할 때 응답합니다.Responding when an unauthenticated user tries to access a restricted resource.

등록된 인증 처리기와 해당 구성 옵션을 "체계"라고 합니다.The registered authentication handlers and their configuration options are called "schemes".

인증 체계는 Startup.ConfigureServices에 인증 서비스를 등록하여 지정됩니다.Authentication schemes are specified by registering authentication services in Startup.ConfigureServices:

  • services.AddAuthentication(예: AddJwtBearer 또는 AddCookie)를 호출한 후에 스키마별 확장 메서드를 호출합니다.By calling a scheme-specific extension method after a call to services.AddAuthentication (such as AddJwtBearer or AddCookie, for example). 이 확장 메서드는 AuthenticationBuilder. AddScheme을 사용하여 적절한 설정으로 체계를 등록합니다.These extension methods use AuthenticationBuilder.AddScheme to register schemes with appropriate settings.
  • 드물게 AuthenticationBuilder.AddScheme을 직접 호출합니다.Less commonly, by calling AuthenticationBuilder.AddScheme directly.

예를 들어, 다음 코드는 cookie 및 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));

AddAuthentication 매개 변수 JwtBearerDefaults.AuthenticationScheme는 특정 체계가 요청되지 않은 경우 기본적으로 사용할 체계의 이름입니다.The AddAuthentication parameter JwtBearerDefaults.AuthenticationScheme is the name of the scheme to use by default when a specific scheme isn't requested.

여러 스키마를 사용하는 경우, 권한 부여 정책(또는 권한 부여 특성)은 사용자를 인증하기 위해 사용해야 하는 인증 체계(또는 체계)를 지정할 수 있습니다.If multiple schemes are used, authorization policies (or authorization attributes) can specify the authentication scheme (or schemes) they depend on to authenticate the user. 위의 예제에서, cookie 인증 체계는 이름을 지정하여 사용할 수 있습니다(AddCookie를 호출할 때 다른 이름을 제공할 수 있지만 기본적으로 CookieAuthenticationDefaults.AuthenticationScheme).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).

경우에 따라, AddAuthentication에 대한 호출은 다른 확장 메서드에서 자동으로 수행됩니다.In some cases, the call to AddAuthentication is automatically made by other extension methods. 예를 들어, ASP.NET Core Identity를 사용하는 경우 AddAuthentication이 내부적으로 호출됩니다.For example, when using ASP.NET Core Identity, AddAuthentication is called internally.

인증 미들웨어는 앱의 IApplicationBuilder에서 UseAuthentication 확장 메서드를 호출하여 Startup.Configure에 추가됩니다.The Authentication middleware is added in Startup.Configure by calling the UseAuthentication extension method on the app's IApplicationBuilder. UseAuthentication을(를) 호출하면 이전에 등록된 인증 체계를 사용하는 미들웨어가 등록됩니다.Calling UseAuthentication registers the middleware which uses the previously registered authentication schemes. 인증되는 사용자에 따라 달라지는 미들웨어 이전에 UseAuthentication을(를) 호출합니다.Call UseAuthentication before any middleware that depends on users being authenticated. 엔드포인트 라우팅을 사용하는 경우 UseAuthentication에 대한 호출이 다음과 같이 이동해야 합니다.When using endpoint routing, the call to UseAuthentication must go:

  • UseRouting 후에 이동하여 인증 결정에 경로 정보를 사용할 수 있습니다.After UseRouting, so that route information is available for authentication decisions.
  • UseEndpoints 전에 이동하여 사용자가 엔드포인트에 액세스하기 전에 인증됩니다.Before UseEndpoints, so that users are authenticated before accessing the endpoints.

인증 개념Authentication Concepts

인증 체계Authentication scheme

인증 체계는 다음에 해당하는 이름입니다.An authentication scheme is a name which corresponds to:

  • 인증 처리기.An authentication handler.
  • 처리기의 특정 인스턴스를 구성하기 위한 옵션입니다.Options for configuring that specific instance of the handler.

체계는 연결된 처리기의 인증, 챌린지 및 금지 동작을 참조하기 위한 메커니즘으로 유용합니다.Schemes are useful as a mechanism for referring to the authentication, challenge, and forbid behaviors of the associated handler. 예를 들어, 권한 부여 정책은 체계 이름을 사용하여 사용자를 인증하는 데 사용해야 하는 권한 부여 체계(또는 체계)를 지정할 수 있습니다.For example, an authorization policy can use scheme names to specify which authentication scheme (or schemes) should be used to authenticate the user. 인증을 구성할 때 기본 인증 체계를 지정하는 것이 일반적입니다.When configuring authentication, it's common to specify the default authentication scheme. 리소스에서 특정 체계를 요청하지 않는 한, 기본 체계가 사용됩니다.The default scheme is used unless a resource requests a specific scheme. 또한 다음과 같은 작업을 수행할 수 있습니다.It's also possible to:

  • 인증, 챌린지 및 금지 작업에 사용할 다른 기본 체계를 지정합니다.Specify different default schemes to use for authenticate, challenge, and forbid actions.
  • 정책 체계를 사용하여 여러 스키마를 하나로 결합합니다.Combine multiple schemes into one using policy schemes.

인증 처리기Authentication handler

인증 처리기:An authentication handler:

인증 체계의 구성 및 들어오는 요청 컨텍스트를 기반으로 하는 인증 처리기:Based on the authentication scheme's configuration and the incoming request context, authentication handlers:

  • 인증에 성공하면 사용자 ID를 나타내는 AuthenticationTicket 개체를 생성합니다.Construct AuthenticationTicket objects representing the user's identity if authentication is successful.
  • 인증에 실패하면 '결과 없음' 또는 '실패'를 반환합니다.Return 'no result' or 'failure' if authentication is unsuccessful.
  • 사용자가 리소스에 액세스하려는 경우에 챌린지 및 금지 작업에 대한 메서드를 사용합니다.Have methods for challenge and forbid actions for when users attempt to access resources:
    • 액세스 권한이 없습니다(금지).They are unauthorized to access (forbid).
    • 인증되지 않았습니다(챌린지).When they are unauthenticated (challenge).

AuthenticateAuthenticate

인증 체계의 인증 작업은 요청 컨텍스트를 기반으로 사용자의 id를 구성합니다.An authentication scheme's authenticate action is responsible for constructing the user's identity based on request context. 인증에 성공했는지와 그런 경우 인증 티켓의 사용자 ID를 나타내는 AuthenticateResult을(를) 반환합니다.It returns an AuthenticateResult indicating whether authentication was successful and, if so, the user's identity in an authentication ticket. AuthenticateAsync을 참조하세요.See AuthenticateAsync. 인증 예는 다음과 같습니다.Authenticate examples include:

  • cookie에서 사용자 ID를 생성하는 cookie 인증 체계입니다.A cookie authentication scheme constructing the user's identity from cookies.
  • JWT 전달자 체계는 JWT 전달자 토큰을 역직렬화하고 유효성을 검사하여 사용자 ID를 생성합니다.A JWT bearer scheme deserializing and validating a JWT bearer token to construct the user's identity.

과제Challenge

인증 챌린지는 인증되지 않은 사용자가 인증을 요구하는 엔드포인트를 요청하는 경우 권한 부여를 수행하여 호출됩니다.An authentication challenge is invoked by Authorization when an unauthenticated user requests an endpoint that requires authentication. 인증 챌린지를 발행합니다(예를 들어, 익명 사용자가 제한된 리소스를 요청하거나 로그인 링크를 클릭하는 경우).An authentication challenge is issued, for example, when an anonymous user requests a restricted resource or clicks on a login link. 권한 부여는 지정된 인증 체계를 사용하여 챌린지를 호출하거나, 기본값(지정되지 않은 경우)을 호출합니다.Authorization invokes a challenge using the specified authentication scheme(s), or the default if none is specified. ChallengeAsync을 참조하세요.See ChallengeAsync. 인증 챌린지 예는 다음과 같습니다.Authentication challenge examples include:

  • 사용자를 로그인 페이지로 리디렉션하는 cookie 인증 체계입니다.A cookie authentication scheme redirecting the user to a login page.
  • www-authenticate: bearer 헤더를 사용하여 401 결과를 반환하는 JWT 전달자 체계입니다.A JWT bearer scheme returning a 401 result with a www-authenticate: bearer header.

챌린지 작업을 통해 요청된 리소스에 액세스하는 데 사용할 인증 메커니즘을 확인할 수 있습니다.A challenge action should let the user know what authentication mechanism to use to access the requested resource.

금지Forbid

인증된 사용자가 액세스를 허용하지 않는 리소스에 액세스를 시도할 때 인증 체계의 금지 작업이 권한 부여에 의해 호출됩니다.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. ForbidAsync을 참조하세요.See ForbidAsync. 인증 금지 예는 다음과 같습니다.Authentication forbid examples include:

  • 액세스를 사용할 수 없음을 나타내는 페이지로 리디렉션하는 cookie 인증 체계입니다.A cookie authentication scheme redirecting the user to a page indicating access was forbidden.
  • 403 결과를 반환하는 JWT 전달자 체계입니다.A JWT bearer scheme returning a 403 result.
  • 사용자가 리소스에 대한 액세스 권한을 요청할 수 있는 페이지로 리디렉션하는 사용자 지정 인증 체계입니다.A custom authentication scheme redirecting to a page where the user can request access to the resource.

금지 작업을 통해 다음을 확인할 수 있습니다.A forbid action can let the user know:

  • 인증되었습니다.They are authenticated.
  • 요청된 리소스에 액세스할 수 없습니다.They aren't permitted to access the requested resource.

챌린지와 금지 간의 차이점에 대해서는 다음 링크를 참조하세요.See the following links for differences between challenge and forbid:

테넌트당 인증 공급자Authentication providers per tenant

ASP.NET Core 프레임워크에는 다중 테넌트 인증을 위한 기본 제공 솔루션이 없습니다.ASP.NET Core framework does not have a built-in solution for multi-tenant authentication. 고객이 기본 제공 기능을 사용하여 쓸 수 있는 것은 분명하지만, 이러한 목적을 위해 Orchard Core를 조사하는 것이 좋습니다.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.

Orchard Core는 다음과 같습니다.Orchard Core is:

  • ASP.NET Core로 빌드된 오픈 소스 모듈형 및 다중 테넌트 앱 프레임워크입니다.An open-source modular and multi-tenant app framework built with ASP.NET Core.
  • 해당 앱 프레임워크 위에 빌드된 콘텐츠 관리 시스템(CMS)입니다.A content management system (CMS) built on top of that app framework.

테넌트당 인증 공급자의 예는 Orchard Core 소스를 참조하세요.See the Orchard Core source for an example of authentication providers per tenant.

추가 자료Additional resources