💡 이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 10장 써머리입니다.
핵심 키워드
OAuth
- 자신이 아닌 다른 플랫폼을 이용해 계정 정보를 사용하는 방식
- 리소스 오너: 자신의 정보를 사용하도록 인증 서버에 허가하는 주체, 서비스를 이용하는 사용자
- 리소스 오너 정보 취득 방법
- 권한 부여 코드 승인 타입
- OAuth 2.0에서 가장 잘 알려진 인증 방법
- 권한에 접근할 수 있는 코드와 리소스 오너에 대한 액세스 토큰을 발급받는 방식
- 권한요청(to 권한서버) → 권한부여(인증코드 제공) → 인증코드를 액세스 토큰으로 교환(로그인 세션에 대한 보안 자격 획득) → 액세스 토큰으로 리소스 오너 정보 사용
- 암시적 승인 타입
- 서버가 없는 JS 웹 애플리케이션 클라이언트에서 주로 사용
- 클라이언트가 요청을 보내면, 리소스 오너의 인증 과정 외엔 별다른 과정 없이 액세스 토큰을 발급받는 방식
- 리소스 소유자 암호 자격증명 승인 타입
- 클라이언트의 패스워드를 이용해 액세스 토큰에 대한 사용자의 자격 증명을 교환
- 클라이언트 자격증명 승인 타입
- 클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식
- 리소스 서버: 리소스 오너의 정보를 가지며, 보호하는 주체. 네이버, 구글, 페이스북 등
- 인증 서버: 리소스 오너의 정보에 접근할 수 있는 토큰을 발급해주는 애플리케이션(서버)
- 클라이언트 애플리케이션: 인증 서버에게 인증을 받고 리소스 오너의 정보를 사용하는 주체
쿠키
- 서버에서 전송되어 클라이언트에 저장된 정보 조각, 키와 값으로 이루어져 있으며 만료 기간, 도메인 등의 정보를 가지고 있음
구현 순서
- 구글 클라우드 콘솔에서 OAuth Client ID, Secret Key 생성 → application.yml 파일에 등록, 인증 정보 깃허브에 업로드 안 되도록 주의
- OAuth2 의존성 추가: build.gradle
- 쿠키 관리 클래스 구현: util.CookieUtil.java
- OAuth2 서비스 구현: 사용자 정보를 조회 → 있으면 최신화, 없으면 추가
- domain.User.java 수정
- config.oauth.OAuth2UserCustomService.java 생성
- OAuth2 설정파일 작성
- config.WebSecurityConfig.java 비활성화(삭제 or 주석처리)
- config.WebOAuthSecurityConfig.java 생성
- 쿠키를 사용해 OAuth 정보를 사용하는 로직 작성: config.oauth.OAuth2AuthorizationRequestBasedOnCookieRepository.java
- 인증 성공 시 실행할 핸들러 구현
- service.UserService.java 수정
- config.oauth.OAuth2SuccessHandler.java 생성
- OAuth 정보를 통해 글쓴이 추가
- domain.Article.java 수정
- dto.AddArticleRequest.java 수정
- service.BlogService.java 수정
- controller.BlogApiController.java 수정
- dto.ArticleViewResponse.java 수정
- data.sql 파일에 author 컬럼 추가
- article.html View 파일 수정
- OAuth View 구성
- controller.UserViewController.java 수정
- oauthLogin.html View 생성
- token.js 생성
- articleList.html 수정
- article.js 수정
- 게시글 수정, 삭제, 글쓴이 확인 로직 추가
- OAuth2 실행 테스트(브라우저, 테스트 코드)
참고자료