상세 컨텐츠

본문 제목

[nestJS] userGuard란 무엇인가?

카테고리 없음

by esoesmio 2024. 5. 9. 21:49

본문

`@UseGuards(AuthGuard())` 어노테이션은 Spring Security의 `@PreAuthorize`나 `getPrincipal()` 메서드와 직접적으로 비교될 수 없습니다. 이는 NestJS에서 사용되며, 특정 경로 또는 컨트롤러 메서드에 대한 액세스를 보호하기 위해 사용됩니다. `@UseGuards`는 경로나 메서드가 실행되기 전에 지정된 Guard를 실행하여 요청을 인증하고 인가합니다. 여기서 `AuthGuard()`는 가장 일반적인 Guard 중 하나로, Passport를 기반으로 하는 인증 메커니즘을 구현합니다.

### `@UseGuards(AuthGuard())`의 역할과 작동 방식

- **역할**: `@UseGuards(AuthGuard())`는 주로 API 경로나 메서드에 보안 레이어를 추가하는 데 사용됩니다. 이를 통해 해당 경로나 메서드에 접근하기 전에 사용자가 적절히 인증되었는지 확인합니다.

- **작동 방식**: `AuthGuard()`는 Passport를 활용하여 인증 과정을 처리합니다. 사용자가 요청을 보낼 때, `AuthGuard`는 요청에 포함된 토큰(JWT 등)이나 세션 정보를 검증하여 사용자가 유효한지 확인합니다. 이 과정에서 유효하지 않거나 인증되지 않은 요청은 거부됩니다.

- **Passport와의 연동**: NestJS의 `AuthGuard`는 내부적으로 Node.js의 인증 미들웨어인 Passport와 통합됩니다. Passport는 다양한 인증 방식을 쉽게 구현할 수 있도록 도와주며, `AuthGuard`는 이러한 구현을 NestJS에서 사용할 수 있게 합니다.

### 비교: `getPrincipal()`과 `@UseGuards(AuthGuard())`

- **`getPrincipal()`**: Java(Spring Security)에서 `getPrincipal()` 메서드는 이미 인증된 사용자의 상세 정보(주로 `UserDetails` 객체)를 반환합니다. 이 정보를 사용하여 애플리케이션 내에서 사용자 관련 로직을 처리할 수 있습니다.

- **`@UseGuards(AuthGuard())`**: NestJS에서 `@UseGuards(AuthGuard())`는 요청이 처리되기 전에 사용자가 인증되었는지 먼저 확인합니다. 인증 과정이 성공하면 요청은 계속 처리되고, 실패하면 요청은 거부됩니다. 이는 `getPrincipal()`과는 다르게, 사용자 정보를 반환하기보다는 요청의 인증 상태를 검증하는 데 초점을 맞춥니다.

결론적으로, `@UseGuards(AuthGuard())`는 인증된 사용자의 세부 정보를 반환하는 것이 아니라, 특정 경로나 메서드를 보호하기 위해 사용자의 인증 상태를 검증하는 데 사용됩니다. 사용자의 세부 정보가 필요한 경우, 인증 후에 다른 방법으로 사용자 정보를 조회할 수 있습니다.

댓글 영역