코딩공작소

Springboot3 실습 (5) - Oauth2로 로그인/로그아웃 구현 본문

어플리케이션개발/springboot실습

Springboot3 실습 (5) - Oauth2로 로그인/로그아웃 구현

안잡아모찌 2024. 4. 11. 20:55

OAuth란?

제3의 서비스에 계정관리를 맡기는 것.

 

리소스 오너 정보를 취득하는 4가지 방법

  • 권한 부여 코드 승인 타입
  • 암시적 승인 타입
  • 리소스 소유자 암호 자격증명 승인 타입
  • 클라이언트 자격증명 승인 타입

 

권한 부여 코드 승인 타입

  • 권한 요청이란? 
    클라이언트, 즉, 스프링 부트 서버가 특정 사용자 데이터에 접근하기 위해 권한 서버, 즉, 카카오나 구글 권한 서버에 요청을 보내는 것
GET spring-authorization-server.example/authorize?
	client_id=66a36b4c2&
    redirect_uri=http://localhost:8080/myapp&
    response_type=code&
    scope=profile
  • client_id : 인증 서버가 클라이언트에 할당하나 고유 식별자. OAuth 서비스에 등록할 때 서비스에 생성하는 값
  • redirect_uri : 로그인 성공 시 이동해야 하는 URI
  • response_type : 인증 코드를 받을 때는 code값을 포함해야 한다. 클라이언트가 제공받길 원하는 응답 타입
  • scope : 제공받고자 하는 리소스 오너의 정보 목록

 

데이터 접근용 권한 부여
인증 서버에 처음 요청을 보낼 때에만 로그인 페이지로 변경하고 사용자의 데이터 접근 동의를 얻는다. 그 후부터는, 로그인만 진행한다. 로그인이 성공하게 되면 권한 부여 서버는 데이터에 접근할 수 있게 인증 및 권한 부여를 수신

 

인증 코드 제공
사용자가 로그인에 성공하면 권한 요청 시에 파라미터로 보낸 redirect_uri로 리다이렉션된다. 이때 파라미터에 인증 코드를 함께 제공한다.

GET http://localhost:8080/myapp?code=a1s2f3mcj2

 

액세스 토큰 응답이란?
인증 코드를 받으면 액세스 토큰으로 교환해야 한다. 이는 로그인 세션에 대한 보안 자격을 증명하는 식별 코드로 /token POST 요청을 보낸다.

POST spring-authrization-server.example.com/token
{
	"client_id" : "66a37v4b2",
    "client_secret" : "aabb11nn44",
    "redirect_uri" : "http://localhost:8080/myapp",
    "grant_type" : "authorization_code",
    "code" : "a1b2b3bcbqksd"
}
  • client_secret : OAuth 서비스에 등록할 때 제공받는 비밀키
  • grant_type : 권한 유형을 확인할 때 사용한다. 이때, authorization_code로 설정해야 한다. 권한 서버는 요청 값을 기반으로 유효한 정보인지 확인하고, 유효한 정보라면 액세스 토큰을 응답한다.
{
	"access_token" : "aasbffb",
    "token_type" : "Bearer",
    "expires_in" : 3600,
    "scope" : "openid profile",
    ...
}

 

 

액세스 토큰으로 API 응답 & 반환
제공받은 액세스 토큰을 통해 리소스 오너의 정보를 가져올 수 있다. 정보가 필요할 때마다 API호출을 통해 정보를 가져오고 서버는 토큰이 유효한지 검사한 뒤 응답

GET spring-authorization-resource-server.example.com/userinfo
Header : Authorization : Bearer aasbdffb

 

 

쿠키란 ?

웹사이트가 사용하는 서버에서 로컬 환경에 저장하는 작은 데이터
쿠키는 키와 값으로 이루어져 있으며 만료 기간, 도메인 등의 정보를 가지고 있다. HTTP 요청을 통해 쿠키의 특정 키에 값을 추가할 수 있다.

 

 

 


토큰 발급받기

 

1단계 )

https://cloud.google.com/cloud-console?hl=ko

 

Google Cloud 콘솔  |  Cloud Console - 웹 UI 관리

콘솔에서 데이터 분석, VM, 데이터 스토어, 데이터베이스, 네트워킹, 개발자 서비스 등 클라우드 애플리케이션의 모든 것을 관리하세요.

cloud.google.com

콘솔에서 새로운 프로젝트를 생성한다.

 

 

여기서 생성된 설정 값을 스프링 부트 애플리케이션 설정 파일에 등록해야 한다.

 

 

application.yml