ASP.NET Core 8.0 최소 API 인증 적용하기
개요
본 문서에서는 ASP.NET Core 8.0을 사용하여 간소화된 Web API에 인증 기능을 적용하는 방법을 설명합니다. 주요 내용은 SQL Server LocalDB를 이용한 데이터 관리와 API 인증 구성에 중점을 둡니다.
전제 조건
- .NET 8.0 설치
- Visual Studio Code 편집기 설치
시작하기
애플리케이션 생성: 적절한 작업 디렉터리에서 Visual Studio Code의 터미널을 열고 다음 명령어를 실행하여 새로운 Web API 프로젝트를 생성합니다.
dotnet new webapi -f net8.0 --name VisualAcademy.Apis
이 명령어는 .NET 8.0 프레임워크를 사용하는
VisualAcademy.Apis
라는 이름의 Web API 프로젝트를 생성합니다.프로젝트 디렉터리로 이동:
cd VisualAcademy.Apis
필요한 패키지 추가: 다음 패키지들을 프로젝트에 추가하여 인증 및 데이터베이스 기능을 활성화합니다.
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
dotnet-ef 도구 설치: Entity Framework Core 마이그레이션과 데이터베이스 관리를 위해
dotnet-ef
도구를 설치합니다.dotnet tool install --global dotnet-ef
이미 설치되어 있다면 최신 버전으로 업데이트합니다.
dotnet tool update --global dotnet-ef
애플리케이션 실행:
dotnet watch
명령을 통해 애플리케이션을 실행하고 실시간으로 변경 사항을 반영합니다.
데이터베이스 컨텍스트 클래스 설정
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) { } }
연결 문자열 설정:
appsettings.json
파일에 SQL Server LocalDB 연결 문자열을 추가합니다."ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=VisualAcademy;Trusted_Connection=True;MultipleActiveResultSets=true" }
Program.cs
에 컨텍스트 등록:ApplicationDbContext
를 서비스 컨테이너에 등록합니다.var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("에러"); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));
인증 및 권한 부여 설정
인증 및 권한 부여 서비스 추가:
builder.Services.AddAuthorization(); builder.Services.AddIdentityApiEndpoints<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>();
미들웨어 설정:
Program.cs
에 인증(UseAuthentication()
) 및 권한 부여(UseAuthorization()
) 미들웨어를 추가합니다.app.UseAuthentication(); app.UseAuthorization();
보안 엔드포인트 설정:
/weatherforecast
엔드포인트에 인증 요구 사항을 추가합니다.app.MapGet("/weatherforecast", () => {...}) .RequireAuthorization();
Identity API 엔드포인트 추가
Program.cs
에 Identity API 엔드포인트를 매핑합니다.
app.MapIdentityApi<IdentityUser>();
마이그레이션 및 데이터베이스 업데이트
마이그레이션 생성: EF Core를 사용하여 데이터베이스 구조 변경을 위한 초기 마이그레이션을 생성합니다.
dotnet ef migrations add InitialCreate -o Data/Migrations
데이터베이스 업데이트: 생성된 마이그레이션을 적용하여 데이터베이스를 업데이트합니다.
dotnet ef database update
테스트
테스트를 위해 .http
파일을 사용하는 방법을 안내합니다. .http
파일은 HTTP 요청을 정의하고 실행할 수 있는 간단한 방법을 제공합니다. 이 파일은 Visual Studio Code와 같은 편집기에서 사용할 수 있는 REST Client 확장을 통해 사용됩니다.
애플리케이션 실행 및 테스트:
dotnet watch
를 통해 애플리케이션을 실행합니다.- Visual Studio Code에서 새
.http
파일을 생성하고 아래의 요청을 추가하여/weatherforecast
엔드포인트에 대한 접근을 테스트합니다.GET http://localhost:5000/weatherforecast
- 이 요청을 실행하면 401 Unauthorized 오류가 발생해야 합니다. 이는 인증이 필요함을 의미합니다.
사용자 등록 테스트:
- 동일한
.http
파일에 다음 요청을 추가하여 사용자 등록을 테스트합니다.POST http://localhost:5000/register Content-Type: application/json { "email": "user@example.com", "password": "yourpassword" }
- 이 요청을 실행하면 사용자가 성공적으로 등록되어야 합니다.
- 동일한
로그인 테스트:
- 로그인을 위해 다음 요청을
.http
파일에 추가합니다.POST http://localhost:5000/login Content-Type: application/json { "email": "user@example.com", "password": "yourpassword" }
- 이 요청을 실행하면 성공적인 로그인 응답이 반환되며, 세션 또는 토큰이 포함될 수 있습니다.
- 로그인을 위해 다음 요청을
인증된 요청 테스트:
- 로그인 후 얻은 인증 정보(토큰 또는 쿠키)를 사용하여
/weatherforecast
엔드포인트에 다시 접근합니다.
또는 쿠키를 사용하는 경우:GET http://localhost:5000/weatherforecast Authorization: Bearer <your_token>
GET http://localhost:5000/weatherforecast Cookie: <your_cookie>
- 인증된 사용자로서 이 요청을 실행하면, 이전에는 접근할 수 없었던 날씨 예보 데이터에 접근할 수 있어야 합니다.
- 로그인 후 얻은 인증 정보(토큰 또는 쿠키)를 사용하여
이 과정을 통해 사용자 등록, 로그인, 그리고 인증된 API 엔드포인트에 대한 접근을 테스트할 수 있습니다. .http
파일을 사용하면 API 요청과 응답을 쉽게 관리하고 테스트할 수 있습니다.