ASP.NET Core 8.0 최소 API 인증 적용하기

  • 6 minutes to read

개요

본 문서에서는 ASP.NET Core 8.0을 사용하여 간소화된 Web API에 인증 기능을 적용하는 방법을 설명합니다. 주요 내용은 SQL Server LocalDB를 이용한 데이터 관리와 API 인증 구성에 중점을 둡니다.

전제 조건

  • .NET 8.0 설치
  • Visual Studio Code 편집기 설치

시작하기

  1. 애플리케이션 생성: 적절한 작업 디렉터리에서 Visual Studio Code의 터미널을 열고 다음 명령어를 실행하여 새로운 Web API 프로젝트를 생성합니다.

    dotnet new webapi -f net8.0 --name VisualAcademy.Apis
    

    이 명령어는 .NET 8.0 프레임워크를 사용하는 VisualAcademy.Apis라는 이름의 Web API 프로젝트를 생성합니다.

  2. 프로젝트 디렉터리로 이동:

    cd VisualAcademy.Apis
    
  3. 필요한 패키지 추가: 다음 패키지들을 프로젝트에 추가하여 인증 및 데이터베이스 기능을 활성화합니다.

    dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore -v 8.0.0
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 8.0.0
    dotnet add package Microsoft.EntityFrameworkCore.Tools -v 8.0.0
    dotnet add package Microsoft.EntityFrameworkCore.Design -v 8.0.0
    
  4. dotnet-ef 도구 설치: Entity Framework Core 마이그레이션과 데이터베이스 관리를 위해 dotnet-ef 도구를 설치합니다.

    dotnet tool install --global dotnet-ef
    

    이미 설치되어 있다면 최신 버전으로 업데이트합니다.

    dotnet tool update --global dotnet-ef
    
  5. 애플리케이션 실행: dotnet watch 명령을 통해 애플리케이션을 실행하고 실시간으로 변경 사항을 반영합니다.

데이터베이스 컨텍스트 클래스 설정

  1. Data 폴더 생성 및 클래스 추가: ApplicationDbContext 클래스를 Data 폴더에 추가하여 데이터베이스 컨텍스트를 설정합니다.

    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    
    namespace VisualAcademy.Apis.Data;
    
    public class ApplicationDbContext : IdentityDbContext<IdentityUser> 
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {
    
        }
    }
    
  2. 연결 문자열 설정: appsettings.json 파일에 SQL Server LocalDB 연결 문자열을 추가합니다.

    "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=VisualAcademy;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
    
  3. Program.cs에 컨텍스트 등록: ApplicationDbContext를 서비스 컨테이너에 등록합니다.

    var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("에러");
    builder.Services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(connectionString));
    

인증 및 권한 부여 설정

  1. 인증 및 권한 부여 서비스 추가:

    builder.Services.AddAuthorization();
    builder.Services.AddIdentityApiEndpoints<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>();
    
  2. 미들웨어 설정: Program.cs에 인증(UseAuthentication()) 및 권한 부여(UseAuthorization()) 미들웨어를 추가합니다.

    app.UseAuthentication();
    app.UseAuthorization();
    
  3. 보안 엔드포인트 설정: /weatherforecast 엔드포인트에 인증 요구 사항을 추가합니다.

    app.MapGet("/weatherforecast", () => {...})
        .RequireAuthorization();
    

Identity API 엔드포인트 추가

Program.cs에 Identity API 엔드포인트를 매핑합니다.

app.MapIdentityApi<IdentityUser>();

마이그레이션 및 데이터베이스 업데이트

  1. 마이그레이션 생성: EF Core를 사용하여 데이터베이스 구조 변경을 위한 초기 마이그레이션을 생성합니다.

    dotnet ef migrations add InitialCreate -o Data/Migrations
    
  2. 데이터베이스 업데이트: 생성된 마이그레이션을 적용하여 데이터베이스를 업데이트합니다.

    dotnet ef database update
    

테스트

테스트를 위해 .http 파일을 사용하는 방법을 안내합니다. .http 파일은 HTTP 요청을 정의하고 실행할 수 있는 간단한 방법을 제공합니다. 이 파일은 Visual Studio Code와 같은 편집기에서 사용할 수 있는 REST Client 확장을 통해 사용됩니다.

  1. 애플리케이션 실행 및 테스트:

    • dotnet watch를 통해 애플리케이션을 실행합니다.
    • Visual Studio Code에서 새 .http 파일을 생성하고 아래의 요청을 추가하여 /weatherforecast 엔드포인트에 대한 접근을 테스트합니다.
      GET http://localhost:5000/weatherforecast
      
    • 이 요청을 실행하면 401 Unauthorized 오류가 발생해야 합니다. 이는 인증이 필요함을 의미합니다.
  2. 사용자 등록 테스트:

    • 동일한 .http 파일에 다음 요청을 추가하여 사용자 등록을 테스트합니다.
      POST http://localhost:5000/register
      Content-Type: application/json
      
      {
        "email": "user@example.com",
        "password": "yourpassword"
      }
      
    • 이 요청을 실행하면 사용자가 성공적으로 등록되어야 합니다.
  3. 로그인 테스트:

    • 로그인을 위해 다음 요청을 .http 파일에 추가합니다.
      POST http://localhost:5000/login
      Content-Type: application/json
      
      {
        "email": "user@example.com",
        "password": "yourpassword"
      }
      
    • 이 요청을 실행하면 성공적인 로그인 응답이 반환되며, 세션 또는 토큰이 포함될 수 있습니다.
  4. 인증된 요청 테스트:

    • 로그인 후 얻은 인증 정보(토큰 또는 쿠키)를 사용하여 /weatherforecast 엔드포인트에 다시 접근합니다.
      GET http://localhost:5000/weatherforecast
      Authorization: Bearer <your_token>
      
      또는 쿠키를 사용하는 경우:
      GET http://localhost:5000/weatherforecast
      Cookie: <your_cookie>
      
    • 인증된 사용자로서 이 요청을 실행하면, 이전에는 접근할 수 없었던 날씨 예보 데이터에 접근할 수 있어야 합니다.

이 과정을 통해 사용자 등록, 로그인, 그리고 인증된 API 엔드포인트에 대한 접근을 테스트할 수 있습니다. .http 파일을 사용하면 API 요청과 응답을 쉽게 관리하고 테스트할 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com