NestJS · OAuth

OAuth provider 프로필을 내부 계정에 매핑하기

OAuth 통합은 provider에서 프로필을 받는 것으로 끝나지 않고, 외부 계정을 내부 사용자와 안전하게 매핑하고 세션 정책으로 이어야 한다.

01

인가 요청

클라이언트가 provider 로그인으로 이동하고 scope와 redirect URI를 전달한다.

02

콜백 처리

provider가 code를 돌려주면 strategy가 token과 profile을 가져온다.

03

계정 매핑

provider id를 기준으로 기존 social account를 찾거나 새 내부 user를 만든다.

04

세션 발급

내부 정책에 맞는 JWT 또는 세션 쿠키를 발급하고 프런트로 복귀시킨다.

provider id
외부 고유 식별자 email보다 안정적인 소셜 계정 연결 키
provider별 namespace 필요
email
보조 식별 검증 여부와 변경 가능성을 확인
자동 병합은 위험
redirect URI
콜백 보안 등록된 URI와 환경별 도메인이 일치해야 함
open redirect 한계
state
CSRF 방어 인가 요청과 콜백을 연결하는 난수 값
세션 또는 쿠키에 저장

매핑 · 범위 · 오류 점검

매핑 같은 email이라는 이유만으로 계정을 자동 병합하지 않는다.
범위 필요 최소 권한만 요청한다.
오류 동의 취소와 provider 장애가 로그인 실패 화면으로 이어진다.
연결 해제 사용자가 소셜 계정 연결을 해제할 정책이 있다.