OAuth
1. 개념
- 웹이나 앱에서 흔히 찾아볼 수 있는 소셜 로그인 인증 방식은 OAuth 2.0 기술을 바탕으로 구현
- 전통적으로 직접 작성한 서버에서 인증을 처리해주는 것과는 달리, OAuth는 인증을 중개해주는 메커니즘
- 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공함으로써 프로세스를 단순화
- 이미 사용자 정보를 가지고 있는 웹 서비스(google, naver 등)에서 사용자의 인증을 대신해주고 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 해당 서비스의 서버에서 인증 하는 개방형 표준 프로토콜
- 인증(Authentication)을 다른 서비스에 맡길 뿐, 접근 권한 관리(Authorization)는 여전히 해당 서비스의 서버가 담당
1) 알아야 할 용어
(1) Resource Owner
(2) Client
- Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램
- 클라이언트는 서버, 데스크탑, 모바일 또는 기타 장치에서 호스팅할 수 있음
(3) Resource server
- client의 요청을 수락하고 응답할 수 있는 서버로 유저의 리소스를 가지고 있음
(4) Authorization server
- 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 Resource server가 액세스 토큰을 발급받는 서버
(5) Authorization grant
- 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 유형으로 대표적인 Grant type중 하나
(6) Authorization code
- access token을 발급받기 전에 필요한 code
- client ID와 client secret을 포함한 일종의 허가증
- client ID로 code를 받아온 후, client secret과 code를 이용해 Access token을 받아옴
(6) Access token
- 보호된 리소스에 액세스하는 데 사용되는 credentials
- Authorization code와 client secret을 이용해 받아온 이 Access token으로 resource server에 접근을 할 수 있음
(7) Scope
- 토큰의 권한을 정의, 즉 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위
2) 과정
- Resource Owner : Client로 접근
- Client : Resource Owner를 Authorization server로 리다이렉트
- Resource Owner : Authorization server에 Resource Owner의 엑세스 권한 부여 요청
- Authorization server : Client에 Authorization Code 제공
- Client : Authorization Code를 Access token으로 교환
- Access token을 통해 Resource에 엑세스 가능 즉, Access token을 발급받은 Client는 Authorization server를 거치지 않고 Resource server와 직접적으로 소통
- Access token과 함께 Resource server에 API 요청을 보내면 Resource server는 Client가 요청한 리소스를 전달
2. Grant type
종류
- Authorization Code Grant Type
- Implicit Grant Type
- Client Credentials Grant Type
- Resource Owner Credentials Grant Type
- Refresh Token Grant Type
1) Authorization Code Grant Type
- 엑세스 토큰을 받아오기 위해서 먼저 Authorization Code를 받아 엑세스 토큰과 교환하는 방법
Authorization Code 절차를 거치는 이유 : 보완성 강화
클라이언트에서 client-secret을 공유하고 엑세스 토큰을 가져오는 것은 탈취의 위험이 있기에 클라이언트에서는 client ID만을 이용해 Authorization Code만 받아오고 서버에서 client-secret까지 포함하여 엑세스 토큰을 요청하는 것
2) Refresh Token Grant Type
- Access token이 만료될 때 마다 소셜 로그인을 갱신해야 한다면 사용자의 편의가 떨어짐
- 유효 기간이 지나서 만료된 Access token을 편리하게 다시 받아오기 위해 사용하는 방법
- Access token보다 Refresh Token의 유효 기간이 대체로 조금 더 길게 설정하기 때문에 가능한 방법
- server 마다 Refresh Token에 대한 정책이 다르기 때문에 Refresh Token을 사용하기 위해서는 사용하고자 하는 server의 정책을 살펴봐야 함
과정
- Client : Refresh Token을 통해 Authorization server에 새로운 Access token을 요청
- Authorization server : Refresh Token을 확인한 후 Access token 발급
- Client : Access token을 통해 Resource에 엑세스 가능