OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신드르이 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.
너무 어려우니 쉽게 풀어서 설명하면 페이스북이나 카카오톡, 애플, 구글, 네이버 등의 외부 소셜 계정을 기반으로 간편하게 회원가입이나 로그인을 할 수 있는 웹 어플리케이션을 흔히 볼 수 있는데 바로 이때 사용되는 프로토콜이 바로 OAuth이다.
OAuth란 Open Authorization의 약자로 어플리케이션이 특정 시스템의 보호된 리소스에 접근하기 위해 사용자 인증(Authentication)을 통해 사용자의 리소스 접근 권한(Authorization)을 위임받는 것을 의미한다.
해당 사용자가 자신이 주장하는 사람인지 확인하는 것으로, 식별(identify)과 연관된 개념. 접근 자격이 있는지 검증하는 단게
해당 사용자에게 리소스에 접근할 수 있는 권한을 부여하는 것으로, 접근(access)과 연관된 개념.
Resource Owner
Client
Authorization Server
Resource Server
Access Token
Refresh Token
Resource Owner가 우리 서비스의 소셜 로그인 버튼을 클릭해 로그인을 요청한다. Client는 OAuth 프로세스를 시작하기 위해 사용자의 브라우저는 Authorization Server로 보내야 한다. Client는 Authorization Server가 제공하는 Authorizaiton URL에 여러 매개변수(response_type, redirect_uri, client_id, scope ...)를 쿼리 스트링으로 포함하여 보낸다.
Client가 빌드한 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID와 PW 등을 입력하여 인증한다.
위의 과정에서 인증에 성공했다면 Authorization Server는 제공된 Redirect URI로 사용자를 리다이렉션시킨다. 이때 Authorization Code를 포함한다. (Authorization Code란 Client가 Access Token을 획득하기 위해 사용하는 임시 코드임. 수명이 매우 짦음)
Client는 Authorization Server에 Authorization Code를 전달하고, Access Token을 응답받는다. Client는 발급받은 Resource Owner의 Access Token을 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용한다.
Client는 Resource Owner에게 로그인이 성공하였음을 알린다.
Resource Owner가 Resource Server의 리소스가 필요한 기능을 Client에 요청한다. Client는 위 과정에서 발급받고 저장해둔 Resource Owner이 Access Token을 사용하여 제한된 리소스에 접근하고, Resource Owner에게 자사의 서비스를 제공한다.
만약 Access Token 기간이 만료되어 401 에러가 나면 Refresh Token을 통해 Access Token을 재발급한다.
(보통 Resource Server는 Access Token을 발급할 때 Refresh Token을 함께 발급해준다. Client는 두 Token을 모두 저장해두고 Resource Server의 API를 호출할 때는 Access Token을 사용한다.)
https://hudi.blog/oauth-2.0/
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-OAuth-20-%EA%B0%9C%EB%85%90-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
https://iam.furo.one/post/concept-oauth