OAuth 2.0
웹에서 소셜 로그인 방식은 대부분 OAuth 2.0 방식을 채택하고 있다. 전통적인 인증방식은 서버에서 인증 과정을 처리하게 된다. 자연스럽게 서버의 오버헤드는 증가하게 되고 성능은 떨어지게 된다. 이런 단점을 개선하기 위해 나온게 OAuth 2.0 인증 방식이다. OAuth 2.0은 인증을 위한 표준 프로토콜의 한 종류다.
OAuth 2.0 이란 무엇인가?
OAtuth 2.0은 기존 인증방식과 달리 인증을 중개해주는 방식이다. 보안이 중요한 리소스에 클라이언트에 접근하는 경우 권한을 제공하는 과정을 단순화하여 제공하고 있다. 이미 사용자 정보를 가지고 있는 소셜 서비스(Google, Meta, Kakao, Naver, Github 등등)에서 인증을 대신 진행해주고, 특정 접근 권한에 대해 토큰을 발급한 후 이를 기반으로 특정 웹 서버에서 인증을 가능하게 한다.
소셜 서비스에서 인증(Authentication)을 대신 해주지만 클라이언트 정보가 서버에 저장되는 건 기존 인증 방식과 동일하다. 즉, 서버에서 접근 권한 관리(Authorization)은 여전히 서버가 담당해야 할 부분이 된다. 그럼에도 불구하고 OAuth 프로토콜을 사용해서 접근 권한 관리, 인증 절차를 간단하게 구현할 수 있다.
Authentication vs Authorization 차이점?
사용자가 서버에 특정 리소스에 접근하기 위해서는 먼저 인증 절차를 거쳐야 한다. 대표적인 인증절차가 Login이다. 서버로 부터 토큰을 부여받거나 session ID를 제공받아 "나는 이 서버스를 제공받을 수 있는 사람이다"라고 서버에 알려주는 절차다. 이 과정이 인증(Authentication)이다.
인증(Authentication)이 완료된 사용자는 특정 접근 권한을 부여받게 된다. 만약 넷플릭스에서 유료 결제를 한 사용자는 컨텐츠에 접근할 수 있는 권한을 부여받게 된다. 이 과정이 인가(Authorization) 과정이다. 사용자가 원하는 정보를 얻기 위해서는 적절한 접근권한관리가 필요하다.
OAuth 장점
사용자 입장에서 수많은 웹사이트를 방문하면서 서비스를 이용하게 된다. 문제는 각각의 서비스들이 인증을 위해 ID/Password를 요구하게 되는데, 모든 웹 사이트의 로그인 정보를 기억하는일이 힘들기 때문에 OAuth를 이용하는 것이다.
또한 특정 웹사이트에 로그인한 사용자 정보가 해킹당할 위험이 있기 때문에 Google, Meta, Naver, Kakao 등 보안이 잘 관리되고 있는 서비스의 로그인 정보를 통해 다른 웹 사이트를 이용하면서 보안에 대한 걱정을 조금은 내려놓을 수 있게 된다.
OAuth 인증 과정
① 사용자는 특정 웹 어플리케이션에서 OAuth 서비스를 요청한다. 웹 어플리케이션(Client)에서는 OAuth 서비스에 Authorization Code를 요청한다.
② OAuth 서비스는 Redirect를 통해 Client에게 Authorization Code를 부여한다.
③ Client는 Server에게 OAuth 서비스에서 전달받은 Authorization Code를 보낸다.
④ Server는 Authorization Code를 다시 OAuth 서비스에 전달해 Access Token을 전달받는다.
⑤ Server는 Access Token으로 Client를 인증하고 요청에 대한 응답을 반환한다.
OAuth 용어들
① Resource Owner : 현재 액세스 중인 Resource의 사용자다. 만약 A 유저가 Google 계정을 사용해서 특정 App에 로그인 하는 경우 Resource Owner는 A 유저가 된다.
② Client : Resource Owner를 대신해 보호되어 있는 Resource에 접근하는 Application이다. Client는 Server, Desktop, Mobile 등의 장치에서 호스팅할 수 있다.
③ Resource Server : Client의 요청을 받고 응답하는 서버다.
④ Authorization Server : Resource Server가 Access Token을 발급받는 서버다. Client 혹은 사용자를 성공적으로 인증한 후 Access Token을 발급하는 서버.
⑤ Authorization grant : Client가 Access Token을 얻을 때 사용하는 자격증명 유형
⑥ Authorization code : Access Token을 발급받기 전 필요한 code. Client는 Authorization Code를 받아온 후 client secret과 code를 사용해 Access Token을 받아오게 된다.
⑦ Access Token : 보호되어 있는 Resource에 접근하는데 사용되는 Credentials다. Authorization Code와 Client Secret를 사용해 받아온 Access Token으로 드디어 Resource Server에 접근 가능해진다.
⑧ Scope : 토큰의 권한을 정의한다. 전달받은 Access Token으로 접근가능한 Resource의 범위.
'Programming' 카테고리의 다른 글
[Docker] 도커 사용하는 이유? (0) | 2022.06.10 |
---|---|
[Docker] Ubuntu 우분투 20.04 LTS 도커 설치 방법 (0) | 2022.06.10 |
[Algorithm] 삽입 정렬(insert sort) Javascript 구현하기 (0) | 2022.06.09 |
[Security] JWT 토큰 기반 인증이란? (0) | 2022.06.08 |
[Security] HTTP session이란 ? (session cookie 차이) (0) | 2022.06.07 |
댓글