OAuth2.0란...?

728x90

이 글은 생활코딩 OAuth2.0 강의를 들으면서 내용을 정리한 내용입니다.

1. 역할

OAuth의 역할은 무엇일까? 
OAuth의 얘기를 할 때, 등장하는 3가지의 주체가 있다. 그 세 가지 주체는 Mine(우리가 만든 서비스), User(사용자), Their(유저는 Their라는 서비스에 회원 가입이 되어있는 상태, 여기서는 대표적인 서비스로 페이스북, 구글, 네이버, 카카오가 있다.) 이고, 이는 OAuth에서는 (언급된 순서대로) Client, Resource Owner, Resource Server 라고 부른다. 이 세 가지가 OAuth의 핵심이다. OAuth의 공식 메뉴얼에서는 Authorization Server라는 것도 존재하는데, 엄밀하게 따지면, 인증과 관련된 처리를 전담하는 서버이고 Resource Server는 데이터를 가지고 있는 서버다(공식 문서에는 엄밀하게 구분되고 있지만, 이 강의해서는 Resource Server 하나로 합쳐서 진행한다)

2. 등록

Client가 Resource Server를 이용하기 위해서는 Resource Server에 사전에 승인을 받아야 하고, 이를 등록이라고 한다. 각 서비스마다 등록하는 방법은 다르지만 공통적인 것이 있다. 

위와 같이 Client ID, Client Secret, Authorized redirect URIs 이 세 가지 요소를 공통적으로 갖는다. Client ID는 우리가 만들고 있는 어플리케이션을 식별하는 식별자이고, Client Secret은 그것에 대한 비밀번호이다. (ID는 노출될 수 있다. 하지만 Client Secret는 절.대 노출되면 안된다!) Authorized redirect URIs는 Resource Server가 권한을 부여하는 과정에서 우리에게 Authorized code라는 값을 전달할 것인데, 이 주소로 그 code를 전달해달라는 의미이다. 

Resource Owner의 승인 

우리가 등록을 하게 되면, Resource Server와 Client는 Client id와 Client Secret 그리고 redirect URL이라는 3가지 정보를 Resource Server가 알게 되고, Client는 Client id와 Client Secret를 알게 될 것이다. Resource Owner의 현재 로그인 상태에 따라서 Resource Server로의 요청에 따라 보여주는데 로그인이 되어있지 않다면 로그인 화면을 보여줄 것이고, 로그인이 되어 있다면 Resource Server의 핵심적인 세 가지 정보(Client ID, Client Secret, redirect URL)가 Client의 정보와 일치하는지 확인하고 일치하는지 확인하고 다르면 작업을 끝내고, 만약 같다면 Resource Owner에게 scope에 해당되는 권한을 Client에게 부여할 것인지를 확인하는 메시지를 전송하게 된다. 허용버튼을 누르게 되면, Resource Server는 scope에 해당하는 정보들을 수집하게 된다(허용했다는 사실도 DB에 저장된다).  

Resource Server의 승인

Resource Owner에서 요청이 오면 바로 Token은 발급하는 것이 아니라, 임시 비밀번호 역할을 하는 authorization code를 Resource Server는 Resource Owner에 전송한다(client_secret 정보도 같이 전달한다). Resource Owner의 웹 브라우저는 로케이션 헤더값에 의해서 Resource Owner의 사용자가 인식하지 못하게 Client에게 전달된다. 이 전달된 두 비밀 정보를(authorization code, client secret)을 결합해서 Resource Server에게 전송하게 된다. 그러면 Resource Server는 authorization code의 정보를 포함한 정보들(Client ID, Client Secery etc...)의 일치여부를 확인하고 그때 다음 단계로 Access Token을 발급한다. 

액세스 토큰 발급 

OAuth의 목적은 액세스 토큰을 발급받기 위함이다. authorization code를 통해서 인증을 했기 때문에, authorization code 값을 지운다. Resource Server는 드디어 accessToken을 발급한다. 그리고 accessToken을 Client에게 응답해준다. Client는 accessToken을 저장한다. 

API 호출

API (Application Programming interface)
Resource server를 호출하는 접점에 있는 일종의 조작장치를 API라고 부른다. API를 호출하기 위해서는 Authorization Bearer 혹은 url에 파라미터를 붙이는 방식 두 가지로 호출할 수 있고 Bearer는 표준화된 방식인 반면 url 방식은 명세를 확인해서 가능한지 여부를 파악해야 한다. 

Refresh Token

AccessToken은 수명이 있다. 이 수명이 끝나면, API에 접속해도 데이터를 받을 수 없다. 다시 발급을 받아야하는데, 그 때마다 사용자에게 AccessToken을 받는 과정을 거치게 하는 것은 불편하다. 바로 그런 경우에 쉽게 AccessToken을 발급 받을 수 있는 것이 Refresh Token이라는 것이다. 

728x90