오늘도 개발

OAuth 2.0(Open Authorization 2.0) 본문

웹 프로그래밍/웹의 이해

OAuth 2.0(Open Authorization 2.0)

Sueeeeeee 2022. 10. 17. 15:02

1. OAuth란?

OAuth란?

OAuth는 사용자 인증을 다른 서비스에게 맡길 때 사용하는 표준 프로토콜.

 

예를 들어 프로젝트로 진행했던 내일의 집에서 카카오 로그인을 누르면 카카오 계정으로 내일의 집을 사용할 수 있다.

이 때 내일의 집은 OAuth 프로토콜로 사용자를 인증했다고 할 수 있다.

 

OAuth2.0

OAuth 2.0은 1.0의 보안 문제를 해결한 버전이다.

- https가 필수이고, 암호화는 https가 담당한다.

- 인증 방식이 다양하다.

- api 서버와 인증서버를 분리한다.

- 액세스 토큰에 유효기간을 부여한다. (1.0에는 유효기간이 없었음)

- 권한 부여 방식에 따라 액세스 토큰 시 재발급 토큰(Refresh Token)을 사용할 수 있다.

 

사용 이유

OAuth 사용 이전에는 인증방식 표준이 없었다.

유저가 카카오로 내일의 집에 로그인하려면, 내일의 집에 자기의 id와 password를 제공해야 했다.

- 유저 : 내일의 집에 내 카카오 id, password가 저장되는 것이 싫음. 내일의 집을 신뢰할 수 없음.  

- 내일의 집 : 유저 id, password를 안전하게 보관해야한다는 것이 부담스러움.

- 카카오 : 내일의 집을 신뢰할 수 없음. 

 

=> OAuth를 사용하면 유저가 id, password를 내일의 집에 제공하지 않아도 안전하게 내일의 집에 로그인할 수 있다.  

2. OAuth 참여자

1) Resource Owner

자원의 소유자. 

로그인하려는 유저.

ex) 나

 

2) Client

Resource Server에 접속해서 정보를 가져오려고 하는 서비스.

ex) 내일의 집

 

3) Authorization Server

권한을 관리하는 서버(인가). 

클라이언트의 접근 자격 확인 후 access token 발급

ex) 카카오의 authorization server

 

4) Resource Server

자원을 가지고 있는 서버.

access token을 가진 클라이언트만 접근할 수 있다.

ex) 카카오의 resource server

3. 토큰 종류

1) Access Token

Authorization Server가 인증 절차를 마친 클라이언트에게 발급하는 토큰.

클라이언트가 Resource Server에 있는 리소스에 접근할 때 사용하는 토큰.

유저가 동의한 사항에 대한 정보가 담겨 있다.

유효기간이 있다.

 

2) Refresh Token

Access Token을 갱신할 때 사용하는 토큰.

1회성으로 한번 사용하면 만료됨.

3. 권한 부여 방식

1) Authorization Code Grant(권한 부여 승인 코드 방식)

Authorization Server에서 자체적으로 클라이언트에게 인가 코드 발급.

인가 코드가 있는 클라이언트만 Authorization Server에게 액세스 토큰을 요청할 수 있다.

클라이언트는 액세스 토큰을 받아서 Resource Server에 있는 유저 정보에 접근할 수 있다.

 

액세스 토큰은 유저 정보를 요청할 때 사용하는 토큰이다.

유저가 접근을 허락한 정보에 대한 정보가 들어있다. 

Refresh token(액세스 토큰 만료시 재발급 받기 위해 사용하는 토큰)을 사용할 수 있다.

출처 : MDS 인텔리전스 블로그 - OAuth 2.0 동작 방식의 이해

 

2) Implicit Grant(암묵적 승인 방식)

OAuth 2.0에서 가장 많이 사용되는 방식. 

Authorization 서버가 인가 코드 없이 바로 액세스 토큰을 발급하며, 액세스 토큰은 URL로 전달된다.

1번보다 빠르고 효율적이지만 보안에 취약 => 액세스 토큰의 만료기간을 짧게 설정해야 함.

Refresh token도 사용할 수 없다.

클라이언트에 자격 증명을 안전하게 저장하기 힘들 때 사용. (ex. js를 사용한 브라우저, 모바일 어플리케이션)

 

3) Resource Owner Password Credentials Grant(자원 소유자 자격증명 승인 방식)

클라이언트에 ID, PW를 저장해놓고 직접 액세스 토큰을 받아오는 방식.

믿을 수 있는 클라이언트(ex. 같은 회사의 서비스)에게만 사용할 수 있는 방식이다.

Authorization server, Resource Server, Client가 모두 같은 시스템에 속해 있어야 사용할 수 있다.

 

4) Client Credentials Grant (클라이언트 자격증명 승인 방식)

신뢰할 수 있는 클라이언트인 경우 ID, secret을 가지고 인증하는 방식.

자격 증명을 안전하게 보관할 수 있는 클라이언트일때만 사용 가능.

Refresh token 사용 불가.