범위 10장 - OAuth2로 로그인/로그아웃 구현하기

 

 

OAuth 용어

- 리소스 오너: 개별 사용자로 리소스 서버에 등록된 각 사용자

- 리소스 서버: 인증 서버의 사용자 데이터를 보유하고 있는 서버

- 인증 서버: 카카오 또는 구글과 같은 계정 서비스

- 클라이언트 애플리케이션: 인증 서버를 통해 로그인을 사용하는 어플리케이션

 

OAuth

- 제 3의 서비스에 계정 관리를 맡기는 프로토콜

- OAuth가 등장하기 전에는 다른 서비스의 리소스를 가져오기 위해서는 다른 사이트의 ID와 password를 직접 입력받아 저장하여 필요한 때마다 불러와서 사용하는 방식 -> 보안 등의 문제가 생겼음.

- 네이버, 구글, 카카오로 로그인하기 같은 방법

- 인증 서버에서 발급받은 토큰을 사용하여 리소스 서버에 리소스 오너의 정보를 요청하고 응답받아 사용할 수 있음.

  1) 권한 부여 코드 승인 타입

  2) 암시적 승인 타입

  3) 리소스 소유자 암호 자격증명 승인 타입

  4) 클라이언트 자격증명 승인 타입

//  https://velog.io/@crow/OAuth-2.0-%EA%B6%8C%ED%95%9C%EB%B6%80%EC%97%AC-%EC%9C%A0%ED%98%95Grant-Type

 

권한 부여 코드 승인 타입

- 클라이언트가 리소스에 접근하는 데 사용하며, 권한에 접근할 수 있는 코드와 리소스 오너에 대한 액세스 토큰을 발급받는 방식

- 서비스에서 가장 중요한 정보인 사용자 데이터가 외부로 전송되지 않아 안전하고, OAuth에서 가장 잘 알려진 인증방법이다

 

인증 순서 (너무 헷갈린다 ㅠㅠ)

- 리소스 서버는 인증 서버에 인증 작업 위임

1. 리소스 오너 -> 애플리케이션에 권한 요청 : 스프링부트 서버가 특정 사용자 데이터에 접근하기 위해 권한 서버에 요청을 보내는 것

2. 리소스 서버 -> 리소스 오너에 데이터 접근용 권한 부여

3. 애플리케이션 -> 인증서버에 인증코드 발급 

4. 애플리케이션 -> 인증 서버에 액세스 토큰으로 발급

5. 애플리케이션 -> 리소스 서버에 액세스 토큰으로 데이터에 접근

 

(

카카오로 로그인 예시

- 사용자가 게임 앱에서 카카오 로그인을 선택.

- 클라이언트 애플리케이션은 카카오 계정 서비스로 리다이렉트되어 사용자 인증 진행.

- 인증 서버는 사용자를 인증하고, 클라이언트 애플리케이션에게 액세스 토큰을 제공.

- 클라이언트 애플리케이션은 액세스 토큰을 사용하여 카카오의 리소스 서버에 사용자 데이터를 요청.

- 리소스 서버는 액세스 토큰이 유효하면 해당 사용자의 데이터를 클라이언트 애플리케이션에 응답.

 

)

 

 

쿠키

- 사용자가 어떤 웹사이트를 방문했을 때 해당 웹사이트의 서버에서 사용자의 로컬 환경에 저장하는 작은 데이터

- 이전에 방문한 적이 있는지 알 수 있고, 로그인을 했었다면 그 정보도 유지할 수 있다.

- 키와 값으로 이루어져있음

- 만료기간, 도메인 등의 정보를 가지고있음

- HTTP 요청을 통해 쿠키의 특정 키에 값을 추가할 수 있다.

- 브라우저가 닫혀도 유지된다.

 

쿠키 추가 과정

- 브라우저에서 요청을 보낸다

- 서버에서 응답과 함께 쿠키를 설정해서 헤더와 함께 보낸다.

- 브라우저는 그걸 저장

- 같은 페이지에서 요청을 보낼 때 브라우저는 요청에 쿠키를 실어서 보낸다

=> 클라이언트에 값을 저장할 수 있어서 현재 사용자 관련 정보를 보여줄 수 있다.

(로그인 저장, 사용자의 활동과 기호를 추적하여 맞춤 서비스 제공, 장바구니 유지, 사용자 환경 설정 저장, 광고 등 가능)

!. 개인 정보 보호에 관련된 이슈가 있을 수 있음

 

 

 

+ 항상 헷갈리는 세가지를 비교해보기로 함 ㅋㅋ  

캐시

- 이전에 얻은 데이터의 복사본을 저장해두는 메모리나 디스크 공간

- 반복적으로 요청되는 데이터나 자주 사용되는 리소스를 저장하여 성능을 향상시키고 서버의 부하를 줄인다.

- 클라이언트 브라우저, 프록시 서버, CDN에서 관리된다.

 

 

세션

- 서버 측에서 유지되는 클라이언트와의 상태 정보를 저장하는 방법

- 사용자의 로그인 상태나 기타 중요한 정보를 서버에 저장하여 유지.

- 각 세션은 고유한 식별자로 구분된다.

- 서버측에 저장되어 클라이언트에 직접 노출되지 않음

- 사용자가 로그아웃 하거나 브라우저를 닫을때까지 유지됨

 

  쿠키 캐시 세션
저장 위치 클라이언트 클라이언트 or 네트워크 서버
수명 서버, 클라이언트의 설정에 따름 클라이언트 측의 설정에 따름 서버, 클라이언트의 설정에 따름
용도 사용자 정보 저장 성능 향상을 위한 데이터 저장 사용자 상태 유지를 위한 데이터 저장