본문 바로가기
3.1SpringBoot/3.1.2 묘공단 SpirngBoot3

[묘공단/spring] 10장 OAuth2로 로그인/로그아웃 구현하기 - 개념

by Dohi._. 2023. 11. 9.

포스팅 목차  (책의 목차와 다릅니다 개인적으로 공부한 내용입니다)

10장

  10-1. OAuth2 이건 뭘까..? 

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

  10-3. COOKIE .. 쿠키! 

 

 

10-1. OAuth2 이건 뭘까..?   

소셜로 로그인하기등등 요즘 카카오로 로그인하기와 같이 제3의 서비스에 계정 관리를 맡기는 방식을 많이 사용하는데

바로 OAuth는 제3의 서비스에 계정 관리를 맡기는 방식입니다.

OAuth를 공부하기전 알아야 할 주요용어

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

OAuth를 사용하면 인증 서버에서 발급받은 토큰을 사용해서 리소스 서버에 리소스 오너의 정보를 요청하고 응답받아 사용할 수 있습니다. 근데 클라이언트는 어떻게 리소스 오너의 정보를 취득할 수 있을지 알아보겠습니다

아래는 리소스 오너의 정보를 취득하는 방법 4가지를 정리해 놨습니다.

  • 권한 부여 코드 승인 타입 
    • 가장 잘 알려진 인증 방법 
    • 클라이언트가 리소스에 접근하는 데 사용하며, 권한에 접근할 수 있는 코드와 리소스 오너에 대한 액세스 토큰을 발급받는 방식
  • 암시적 승인 타입
    • 서버가 없는 자바스크립트 웹 애플리케이션 클라이언트에서 주로 사용하는 방법
  • 리소스 소유자 암포 자격 증명 승인 타입
    • 클라이언트의 패스워드를 이용해서 액세스 토큰에 대한 자격 증명을 교환하는 방식
  • 클라이언트 자격 증명 승인 타입
    • 클라이언트가 콘텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식

 

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

이번 묘공단 블로깅에서는 책과 동일하게 권한 부여 코드 승인 타입을 중심으로 설명하고자 합니다.

이방식을 이해하기 위해서는 애플리케이션, 리소스 오너(사용자), 리소스 서버, 인증 서버가 어떠한 순서로 인증을 하는지 파악을 해야 합니다.

간단하게 순서를 요약하면 일단 리소스 서버는 인증 서버에 인증작업 위임

  1. 리소스 오너 -> 애플리케이션 : 권한 요청
    • 권한 요청은 클라이언트, 즉 스프링 부트 서버가 특정 사용자 데이터에 접근하기 위해 권한 서버에 요청을 보내는 것
    • 요청 URI는 권한 서버마다 다르지만 보통 클라이언트 ID, 리다이렉트 UR, 응답 타입 등을 파라미터로 보냄
      • 클라이언트 ID : 인증 서버가 클라이언트에 할당한 고유 식별자. 이 값은 클라이언트 애플리케이션을 OAuth 서비스에 등록할 때 서비스에서 생성하는 값임
      • 리다이렉트 URI :로그인 성공 시 이동해야 하는 URI
      • 응답 타입 :클라이언트가 제공받기 원하는 응답 타입, 인증 코드를 받을 때는 code 값 포함해야 함
  2. 리소스 서버 -> 리소스 오너 : 데이터 접근용 권한 부여
    • 데이터 접근용 권한 부여는 인증 서버에 요청을 처음 보내는 경우 사용자에게 보이는 페이지를 로그인 페이지로 변경하고 사용자의 데이터에 접근 동의를 얻음
    • 해당 과정은 최초 1회만 진행되고 이후에는 인증 서버에서 동의 내용을 저장하고 있기 때문에 로그인만 진행
    • 로그인 성공 후 권한 부여 서버는 데이터에 접근할 수 있게 인증 및 권한 부여를 수신함
  3. 애플리케이션 -> 인증 서버 : 인증 코드 발급
    • 인증 코드 제공은 사용자가 로그인에 성공하면 권한 요청 시에 파라미터로 보낸 redirect_uri로 리다이렉션 됨
    • 이때 파라미터에 인증 코드를 함께 제공
  4. 애플리케이션 -> 인증 서버 : 액세스 토큰으로 발급
    • 액세스 토큰 응답은 인증 코드를 받으면 액세스 토큰으로 교환해야 함
    • 액세스 토큰은 로그인 세션에 대한 보안 자격을 식별하는 코드를 의미함
  5. 애플리케이션 -> 리소스 서버 : 액세스 토큰으로 데이터에 접근
    • 액세스 토큰으로 API응답 & 반환은 이제 제공받은 액세스 토큰으로 리소스 오너의 정보를 가져올 수 있음
    • 정보가 필요할 때마다 API호출을 통해 정보를 가져오고 리소스 서버는 토큰이 유효한지 검사한 뒤 응답함

 

10-3. COOKIE .. 쿠키!

쿠키는 어떤 웹사이트에 방문했을대 해당 웹사이트의 서버에서 사용자의 로컬 환경에 저장하는 작은 데이터를 의미합니다. 우리는 이 값이 존재하기에 이전에 방문한 적이 있는지 알 수 있고 로그인 정보 또한 유지가 가능합니다.

쿠키는 키와 값으로 이루어져 있으며 만료 기간, 도메인 등의 정보를 가지고 있습니다.

클라이언트가 정보를 요청하면 서버에서 정보를 값으로 넣은 쿠키를 생성해서 요청한 정보 (=HTTP 헤더)와 함께 돌려보내집니다.

그러면 클라이언트는 로컬, 즉 브라우저에 쿠키를 저장합니다.

이후 사이트 재방문 시 사용자가 로컬 환경에 있는 쿠키와 함께 서버에 요청합니다.

이렇게 클라이언트에 값을 저장할 수 있기 때문에 현재 사용자 관련 정보를 보여줄 수 있게 됩니다.


이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 10장 써머리입니다.

 

728x90

댓글