Back End/🌈 ASP.NET
Swagger UI에서 JWT 토큰 추가
James Wetzel
2025. 6. 10. 19:38
Program.cs 수정: SwaggerGen에 JWT 인증 추가
Program.cs 파일을 열고 builder.Services.AddSwaggerGen() 부분에 다음 설정을 추가합니다.
Program.cs (Swagger 인증 설정 추가)
// Program.cs
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models; // OpenApiSecurityScheme, OpenApiSecurityRequirement 사용을 위해 필요
using Microsoft.AspNetCore.Authorization; // 이미 있다면 생략
var builder = WebApplication.CreateBuilder(args);
// 1. 필요한 서비스 등록
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
// -------------------------------------------------------------
// SwaggerGen 설정 수정: JWT Bearer 인증 지원 추가
// -------------------------------------------------------------
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My Web API", Version = "v1" });
// JWT Bearer 인증 스킴 정의
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Name = "Authorization", // 헤더 이름
Type = SecuritySchemeType.ApiKey, // API 키 타입 (인증 스킴)
Scheme = "Bearer", // 스킴 이름 (JWT 토큰의 접두사)
BearerFormat = "JWT", // Bearer 포맷
In = ParameterLocation.Header, // 토큰이 HTTP 헤더에 위치
Description = "JWT 인증을 위한 Bearer 토큰을 입력하세요. 예: 'Bearer {token}'"
});
// 보호된 엔드포인트에 대한 보안 요구 사항 추가
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer" // 위에서 정의한 보안 스킴의 ID
}
},
new string[] {} // 이 스킴에 대한 요구 사항 (여기서는 역할 등 추가 없음)
}
});
});
// -------------------------------------------------------------
// 기존 JWT 설정 가져오기
var jwtSettings = builder.Configuration.GetSection("JwtSettings");
var secretKey = jwtSettings["Secret"];
if (string.IsNullOrEmpty(secretKey))
{
throw new InvalidOperationException("JWT Secret key not found or is empty in configuration.");
}
// 인증 서비스 추가 (JWT Bearer 스킴 사용)
builder.Services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtSettings["Issuer"],
ValidAudience = jwtSettings["Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey))
};
});
// 권한 부여 서비스 추가
builder.Services.AddAuthorization();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(); // <--- Swagger UI 미들웨어
}
app.UseHttpsRedirection();
// 인증 및 권한 부여 미들웨어 파이프라인에 추가 (순서 중요!)
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
설정 설명:
- c.AddSecurityDefinition("Bearer", ...):
- Swagger UI에 "Bearer"라는 이름의 보안 스킴을 정의합니다.
- Type = SecuritySchemeType.ApiKey: 인증 타입이 API 키와 유사함을 나타냅니다 (헤더를 통해 전달).
- Scheme = "Bearer": HTTP Authorization 헤더에서 사용할 인증 스킴이 "Bearer"임을 나타냅니다 (예: Authorization: Bearer <token>).
- BearerFormat = "JWT": Bearer 토큰의 형식이 JWT임을 명시합니다.
- In = ParameterLocation.Header: 이 토큰이 HTTP 요청 헤더에 위치함을 나타냅니다.
- Name = "Authorization": 토큰이 포함될 HTTP 헤더의 이름입니다.
- Description: Swagger UI에 표시될 설명입니다.
- c.AddSecurityRequirement(...):
- API 문서에서 어떤 엔드포인트들이 이 보안 스킴을 요구하는지 Swagger UI에 알립니다.
- Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }: 위에서 정의한 "Bearer" 보안 스킴을 참조합니다.
- new string[] {}: 이 스킴에 대한 특정 스코프(Scope)나 역할을 지정하는 부분입니다. JWT Bearer의 경우 일반적으로 빈 배열로 둡니다.
Swagger UI 사용 방법:
위 설정을 Program.cs에 적용하고 애플리케이션을 실행한 후, Swagger UI (https://localhost:포트번호/swagger/index.html)에 접속하면 다음과 같은 변화를 볼 수 있습니다:
- "Authorize" 버튼: Swagger UI 페이지 상단 또는 각 엔드포인트 옆에 "Authorize" 버튼 또는 자물쇠 아이콘이 생깁니다.
- 인증 대화 상자:
- 이 "Authorize" 버튼을 클릭합니다.
- 팝업 창이 나타나면 "Bearer" 스킴이 보이고, "Value" 입력 필드가 있을 것입니다.
- 여기에 Bearer <복사한_JWT_토큰> 형식으로 토큰을 입력합니다. Bearer라는 접두사와 한 칸 띄우는 것(Bearer)을 잊지 마세요! 예) Bearer jwt-token
- 잠금 아이콘 활성화:
- 토큰을 입력하고 "Authorize"를 클릭하면, Swagger UI 내의 각 보호된 엔드포인트 옆의 자물쇠 아이콘이 '잠김' 상태로 변경됩니다. 이는 현재 인증 상태임을 나타냅니다.
- 보호된 엔드포인트 테스트:
- 이제 ProtectedController의 GET /Protected 엔드포인트를 찾아 "Try it out"을 클릭하고 "Execute"를 누르면, Swagger UI가 자동으로 Authorization: Bearer <YourToken> 헤더를 포함하여 요청을 보낼 것이고, 성공적인 응답을 받을 수 있습니다.
JWT 인증 & 권한 설정
// 인증 & 권한 속성
[Authorize]
// 모든 사용자 허용
[AllowAnonymous]
728x90
반응형