본문 바로가기
카테고리 없음

10. OAuth2로 로그인/로그아웃 구현하기

by 예린lynn 2023. 11. 5.
728x90

1. OAuth

  • 리소스 오너(resource owner) : 자신의 정보를 사용하도록 인증 서버에 허가하는 주체  ex) 서비스 이용자
  • 리소스 서버(resource server) : 리소스 오너의 정보를 가지는 주체  ex) 네이버, 구글
  • 인증 서버(authorization server) : 클라이언트에게 리소스 오너의 정보에 접근할 수 있는 토큰 발급
  • 클라이언트 애플리케이션(client application) : 인증을 받고 리소스 오너의 리소스를 사용하는 주체  ex) 서비스

2. 권한 부여 코드 승인 타입

   -클라이언트가 리소스 오너의 정보를 취득하는 대표적인 인증 방법

  1. 권한 요청 : 클라이언트가 특정 사용자 데이터에 접근하기 위해 권한 서버에 요청을 보내는 것  ex) client_id, redirect_url, response_type, scope
  2. 데이터 접근용 권한 부여 : 권한 부여 서버는 데이터에 접근할 수 있도록 인증 및 권한 부여를 수신
  3. 인증 코드 제공 : 로그인 성공 시 파라미터에 인증 코드 제공
  4. 액세스 토큰 응답 :  인증 코드를 액세스 토큰(로그인 세션에 대한 보안 자격을 증명하는 식별 코드)으로 교환           ex) client_secret, grant_type
  5. 액세스 토큰으로 API 응답&반환 : 액세스 토큰으로 API 호출을 통해 리소스 오너의 정보를 가져오고, 리소스 서버는 토큰의 유효성 검사 후 반환

3. 쿠키

   - 서버에서 사용자의 로컬 환경에 저장하는 작은 데이터

   - 클라이언트가 서버에 정보 요청 -> 서버가 정보를 값으로 넣은 쿠키 생성 -> 브라우저에 쿠키와 HTTP 헤더 전송

     -> 클라이언트가 브라우저에 쿠키 저장 

 

4. 스프링 시큐리티로 OAuth 구현

 (1) 쿠키 관리 클래스 구현

    -쿠키 추가, 쿠키 삭제, 직렬화(객체를 쿠키의 값으로 들어갈 값으로 변환), 역직렬화(쿠키를 객체로 변환)

   -> 쿠키 추가: 요청값(이름, 값, 만료 기간)을 바탕으로 쿠키 추가

 

   -> 쿠키 삭제: 쿠키를 빈 값으로 바꾸고, 만료 시간을 0으로 설정

 

 (2) OAuth2 서비스 구현

   -제공받은 인증 객체로 사용자 정보를 가져오는 역할을 하는 서비스

  1. 사용자 이름 및 관련 키 저장

 

     2. 사용자 조회

  ->유저 객체를 만들어주는 loadUser를 통해 사용자 객체(식별자, 이름, 이메일 등)를 불러옴

 

5. OAuth2 설정 파일 작성

   -OAuth2, JWT에 맞게 설정 파일 수정

 

   (1) 토큰 방식에 맞도록 기존 기능 비활성화

 -> 기존에 사용하던 폼로그인, 세션을 비활성화

 

   (2) 인증 요청과 관련된 상태를 저장할 저장소 구현

 

   (3) 인증 성공 시 실행할 핸들러 구현

   -> 생성자를 사용해 직접 생성해서 패스워드를 암호화할 수 있도록 코드 수정

 

   (4) 

   -> refreshToken: 리프레시 토큰 생성

       addRefreshToken: 리프레시 토큰을 쿠키에 저장

       accessToken: 액세스 토큰 생성

       clearAuthenticationAttributes: 세션과 쿠키에 임시로 저장해둔 인증 관련 데이터 제거

      

6. 글에 글쓴이 추가하기

 

   (1) author 변수 추가

   -> 객체를 생성할 때 글쓴이를 입력받을 수 있도록 함

 

   (2) API에 작성자 추가 저장

 

   (3) 유저 이름 추가 입력/반환

 

   (4) 현재 인증 정보를 가져오는 객체 생성

   -> 유저 이름을 가져와서 save() 로 넘겨줌

 

   (5) 글 상세 페이지에서의 글쓴이 정보

 

   (6) 애플리케이션 실행시 데이터 추가

 

 

 

 

728x90