🎈OAuth
인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로 사용되는 접근 위임을 위한 개방형 표준이다.
쉽게 말하면, Google 로그인 기능이다. 웹 서버에 Google 비밀번호를 제공하지 않고도, Google 계정의 일부 접근 권한을 부여할 수 있다. SNS 간편 로그인 기능(Google, Kakao 등)이 그 예시이다.

탄생 배경
OAuth가 없다면,
'A' 어플리케이션에서 Naver의 정보(리소스)를 가져오기 위해서는 Naver의 ID와 PW를 직접 입력 받아서 'A' 어플리케이션에 저장해서 필요할 때마다 불러와서 사용을 해야했다.
문제점1 : 사용자 - 'A' 어플리케이션에 Naver의 ID와 PW를 넘겨주는 것에 대해 신뢰할 수 없다.
문제점2 : 'A' 어플리케이션 - Naver의 ID와 PW를 저장하기 때문에 보안 문제가 생기는 경우 모든 책임을 져야한다.
문제점3 : Naver - 'A' 어플리케이션을 신뢰할 수 없다.
=> 이러한 문제를 해결하기 위해 OAuth를 도입하여 인증을 외부 어플리케이션에 위임하여 처리하도록 해결한다.
OAuth 2.0 구성요소
Resource Owner
- 웹 서비스를 이용하려는 유저, 자원(개인정보)을 소유하는 자, 사용자 |
Client
- 특정한 개인 혹은 회사가 만든 서비스를 의미
- 일반적인 웹/앱 서버를 의미하지만, Client라고 칭한다. 그 이유는 Resource Server (Google, Facebook 등)의 입장에서는 Client이기 때문이다.
Resource Server
- 사용자의 개인정보를 가지고 있는 서버(Google, Facebook 등)를 의미한다.
- Client는 Access Token을 Resource Server에 보내서 사용자의 개인정보를 얻는다.
Authorization Server
- 실질적으로 권한 부여 기능을 담당하는 서버이다.
- 사용자는 자신의 SNS 계정 정보(ID,PW)를 넘겨 Authorization Code를 받는다.
- Client는 사용자로부터 받은 Authorization Code를 넘겨 Access Token을 받는다.
Access Token
- 자원에 대한 접근 권한을 Resource Owner가 인가하였음을 나타내는 자격증명
- 비교적 짧은 만료기간을 가졌다.
Refresh Token
- 비교적 긴 만료기간을 가졌다.
- Client는 Authorization Server로 부터 access token고 refresh token을 함께 부여받는다.
- access token은 보안상 만료기간이 짧기 때문에 얼마 지나지 않아 만료되면 사용자는 로그인을 다시 시도해야한다. 그러나 refresh token이 있다면 access token이 만료될 때 refresh token을 통해 access token을 재발급 받아 재 로그인 할 필요없게끔 한다.

안전하지 않은 인증 방식 예시
- Google 로그인 요청(데이터 : Google 계정 정보)
- 사용자의 Google 계정로그인
- 사용자 정보 얻기
- 로그인 성공 응답

안전한 인증방식 : Access Token 이용하기
Access Token을 사용자가 설정한 권한에 대해서만 Google 정보에 접근할 수 있도록 한다. 이러한 Access Token을 이용하기 위해서는 OAuth 2.0을 이용한다.
🔗출처
OAuth 구성요소 이미지 출처
OAuth InpaDevBlog
Access Token InpaDevBlog