범위 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 네트워크 | 서버 |
수명 | 서버, 클라이언트의 설정에 따름 | 클라이언트 측의 설정에 따름 | 서버, 클라이언트의 설정에 따름 |
용도 | 사용자 정보 저장 | 성능 향상을 위한 데이터 저장 | 사용자 상태 유지를 위한 데이터 저장 |
'묘공단 스프링부트 스터디' 카테고리의 다른 글
묘공단 스프링부트 스터디 8주차 (0) | 2023.12.25 |
---|---|
묘공단 스프링부트 스터디 7주차 (0) | 2023.12.25 |
묘공단 스프링부트 스터디 5주차 (2) (0) | 2023.12.06 |
묘공단 스프링부트 스터디 5주차 (1) (2) | 2023.12.03 |
묘공단 스프링부트 스터디 4주차 (1) | 2023.11.27 |