-
OAuth 2.0의 개념과 작동방식에 대해 정리하였습니다.
< OAuth 란? >
OAuth는 인증을 위한 표준 프로토콜의 한 종류로 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 중 한 방법입니다.
(보안된 리소스에 액세스하기 위해 OAuth를 이용할 수도 있고, 간단히 로그인하기 위해 OAuth를 이용할 수도 있습니다.)
OAuth는 인증(Authentication)이 아니라 권한 부여(Authorization)에 관한 것입니다.OAuth 장점 :
1. OAuth는 클라이언트에게 ID/Password를 공유하지 않고, 대신 Authorization Token을 전달합니다.
그래서 유저의 민감한 정보가 클라이언트(App)에게 노출될 일이 없고 인증 권한에 대해 미리 유저에게 허가를 구해야 하기 때문에 더 안전합니다.2. OAuth를 활용하여 자주 사용하는 서비스들(Google, Naver, KaKao 등)의 ID와 Password만 기억해 놓고 해당 서비스들을 통해서 로그인할 수 있기 때문에 매우 편리합니다.
OAuth 비유 : 차량의 발렛 키
: 발렛 키는 대리자가 자동차를 시동하고 이동할 수 있게 해주지만, 트렁크나 글로브 박스에 접근할 수는 없습니다.
< OAuth에서 사용되는 용어 >
- Resource Owner : 액세스 중인 리소스의 유저입니다. 홍길동의 구글 계정을 이용하여 App(클라이언트)에 로그인할 경우, 이때 Resource owner은 홍길동이 됩니다.
- Client : Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램입니다. 클라이언트는 서버, 데스크탑, 모바일 또는 다른 기타 장치가 될 수 있습니다.
- Resource server : client의 요청을 수락하고 응답할 수 있는 서버입니다.(유저의 리소스를 가지고 있는 서버)
- Authorization server : Resource server가 액세스 토큰을 발급받는 서버입니다. 즉 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 액세스 토큰을 발급하는 서버를 말합니다.
- Authorization grant : 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 방법입니다. 대표적으로 'Authorization Code Grant Type'을 사용합니다.
- Authorization code : access token을 발급받기 전에 필요한 code입니다. client ID로 이 code를 받아온 후, client secret과 code를 이용해 Access token 을 받아옵니다.
- Access token : 보호된 리소스에 액세스하는 데 사용되는 credentials입니다. Authorization code와 client secret을 이용해 받아온 이 Access token으로 이제 resource server에 접근을 할 수 있습니다.
- Scope : scope는 토큰의 권한을 정의합니다. 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위입니다.
< OAuth 작동 방식 > - Authorization Code Grant Type
1. Resource Owner(User),
2. Client(APP),
3. Authorization Server,
4. Resource Server
를 이용해 실제로 OAuth - Authorization Code Grant Type이 작동하는 방식을 알아보겠습니다.
Step 1 - 유저가 클라이언트(App)로 접근하여 Resource Server에 있는 정보를 요청합니다.
Step 2 - 클라이언트(App)가 유저를 Authorization Server로 리다이렉트 합니다.
Step 3 - 유저가 Authorization Server에게 클라이언트(App)가 정보에 액세스할 수 있는 권한을 부여하는 것에 동의합니다.
Step 4 - Authorization Server가 클라이언트(App)에게 Authorization Code를 제공합니다.
Step 5 - 클라이언트(App)는 받은 Authorization Code를 Authorization Server로 가져가 Access Token으로 교환합니다.
Step 6 - 클라이언트(App)는 Access Token을 이용해 Resource Server에 있는 정보에 액세스할 수 있습니다.
=> Authorization Code를 받아옴(프론트엔드)
=> 받아온 Authorization Code를 백엔드로 전달(프론트엔드)
=> Authorization Code를 Access Token으로 교환(백엔드)
=> 받아온 Access Token을 프론트엔드로 전달(백엔드)
+. Access Token을 받기 전에 Authorization Code 절차를 거치는 이유는 보안성 이유 때문입니다.
클라이언트(App)에게 Client-secret을 공유하고 액세스 토큰을 가지고 오는 경우, 탈취될 위험이 있기 때문에 클라이언트에서는 Authorization Code만 받아오고 서버에서 Access Token 요청을 진행합니다.
'Back-end' 카테고리의 다른 글
Token Authentication (0) 2022.02.23 Cookie & Session (1) 2022.02.22 Introduction: Security, Authentication, and Authorization (0) 2022.01.14 What is the Back-End? (0) 2021.11.02 - Resource Owner : 액세스 중인 리소스의 유저입니다. 홍길동의 구글 계정을 이용하여 App(클라이언트)에 로그인할 경우, 이때 Resource owner은 홍길동이 됩니다.