image

이번주는 정말 게으르게 보낸 것 같다.

물론 옛날에 비하면 엄청난 발전이지만… 역시 한번 쉬면
계속 쉬고 싶은 마음이 생겨서,, 조금 게으르게 학습한 느낌을 받았다.

다시한번 각성하여 Spring 세션을 잘 마무리 해보자.


OAuth 2

OAuth 2 란?

흔히 생각해보면, 우리가 웹사이트 로그인을 할때
소셜 로그인(구글,카카오톡 등) 인증방식을 사용해 로그인을 하는데
이런 인증방식들은 OAuth2라는 기술을 바탕으로 구현이 된다.

우리가 알고 있는 일반적인 애플리케이션은
서비스를 이용하는 사용자에 대한 인증처리는 해당 애플리케이션이 직접했다.

image
- 크리덴셜을 저장하지 않는 아키텍처 -

OAuth2 인증 프토토콜은 특정 애플리케이션에서 사용자의 인증을 직접
처리하는 것이아니라 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티
애플리케이션(구글,카카오톡 등)에서 인증을 대신 처리해주고 Resource에 대한
자격 증명용 토큰을 발급한후, Client가 해당토큰을 이용해 써드파티 애플리케이션의
서비스를 사용하게 해주는 방식이다.


*써드 파티(3rd Party)란?
프로그래밍을 도와주는 라이브러리를 만드는 외부 생산자를 뜻한다.

1st 파티 개발자 : 하드웨어 생상자가 ‘직접’ 소프트웨어를 개발하는 경우
2nd 파티 개발자 : 하드웨어 생산지인 기업과 자사간의 관계에 속한 소프트웨어 개발자
3rd 파티 개발자 : 아무 관련없는 제3자 소프트웨어 개발자
이렇게 예를 들어볼 수 있을 것 같다.


OAuth 2 인증 컴포넌트 역할

시작에 앞서 OAuth 2 인증을 처리하는
컴포넌트들이 무엇이 있고 어떠한 역할을하는지 알아보자

  1. Resource Owner
    -> 사용하고자 하는 Resource의 소유자를 의미한다.
  2. Client
    -> Resource Owner를 대신해 보호된 Resource에 엑세스하는 애플리케이션
  3. Resource Server
    -> Client의 요청을 수락하고 Resource Owner에 해당하는 Resource를 제공하는 서버
  4. Authorization Server
    -> Clinet가 Resource Server에 접근할 수 있는 권한을 부여하는 서버

이렇게 글로만 정리하자면 사실 이해하기 힘들 것이다.

image

대략적인 역할을 보면 이렇게 나눠볼 수 있을 것 같다.
기존에 우리가 불러오던 Client가 웹 애플리케이션 서버로
변경된 모습을 볼 수 있다.

Resource Owner의 대리인으로써 구글에 인증과 Resource를
요청하고 있기때문에 Client라고 부를 수 있다


Authorization Grant 유형

Authorization Grant는 Client 애플리케이션이 Access Token을
얻기 위한 Resource Owner의 권한을 표현하는 크리덴셜(Credential)을 의미한다.

즉, Access Token을 얻기 위한 수단이다.

*Access Token 이란?
Client가 Resource Server에 보호된 Resource에
엑세스하기 위해 사용하는 자격 증명용 토큰이다.


총 4가지의 타입이 있으니 알아보자

1). Authorization Code Grant (권한부여 승인 코드 방식)
-. 가장 많이 쓰이는 방법이고 기본이 되는 방식이다.
-. 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식이다.
-. Refresh Token을 사용할 수 있다.
-. 권한 부여 승인 요청시 응답 타입을 code로 지정하여 요청한다.

image


2). Implicit Grant (암묵적 승인 방식)
-. 별도의 Authorization Code 없이 바로 Access Token을 발급받는 방식이다.
-. 자격증명을 안전하게 저장하기 힘든 Client에게 최적화된 방식이다.
-. Refresh Token 사용이 불가능하다.
-. 권한 부여 승인 요청시 응답타입을 token으로 지정하여 요청한다.

image


3). Resource Owner Password Credential Grant (자원 소유자 자격증명 승인방식)
-. 로그인 시 필요한 정보로 Access Token을 발급 받는 방식이다.
-. 자신의 서비스에서 제공하는 애플리케이션의 경우에만 사용되는 인증 방식이다.
(Authorization Server, Resource Server, Client가 모두 같은 시스템에 속해있을 경우에만 가능)
-. Refresh Token 사용이 가능하다.

image


4). Client Credentials Grant (클라이언트 자격증명 승인방식)
-. Client 자신이 관리하는 Resource, Authorization Server에 해당 Client를 위한
제한된 Resource 접근 권한이 설정되어 있을 경우 사용 가능한 방식이다.
-. Refresh Token의 사용이 불가능하다.

image


사전 준비

위에서 얘기했듯이 우리는 써드파티 애플리케이션 중
OAuth 2 인증 프로토콜을 제공하는 벤더(구글, 카카오톡, 페이스북 등)를
선정 한다음 프로그램을 작성해야한다.

그중 위에서 예로든 구글의 OAuth 2 프로토콜을 이용해볼 예정이고
프로그램 작성 전에 먼저 클라이언트 ID와 Secret를 생성해야한다.
구글 API 콘솔에서의 OAuth 2 설정 - 출처: yoonbumtae님을 보고
클라이언트 ID와 Secret를 생성하면 준비는 끝난다.

image



오늘은 OAuth 2 에대한 간단한 지식을 알아봤다.
사실 이론만 보기에는 코드를 보지않아서
느낌이 확 와닿지는 않는다…

하지만 큰그림을 보고 코드를 보면 더 눈에 잘들어오기 때문에
큰 아키텍처를 생각하고 코드를 다움주부터 연습을 해봐야겠다.

오늘 공부는 여기서 끝 !


오늘의 커피량: ☕️ ☕️
오늘의 점심: 김밥, 된장찌개