개발일지

OAuth 2.0 알아보기 본문

CS, WEB

OAuth 2.0 알아보기

lyjin 2022. 12. 12.

OAuth(Open Authorization)란?

"자신이 소유한 리소스에 다른 소프트웨어 애플리케이션이 접근할 수 있도록 허용해 줌으로써 접근 권한을 위임해주는 개방형 표준 프로토콜" . 우리가 흔히 사용하는 구글, 카카오 간편 로그인 기능도 OAuth2.0 프로토콜을 기반으로 한다.

 

 

탄생 배경

OAuth 이전에도 사용자의 아이디와 패스워드가 노출되지 않도록 하면서 API 접근 위임이 가능한 인증 방법이 존재했다. 구글과 야후, 아마존 등에서 각각의 인증 방식을 제작하여 사용했다. 그러던 도중 트위터 개발자와 Gnolia의 개발자가 만나 표준안에 대한 논의를 거쳤고 마침내 OAuth 등장, 2010년에는 OAuth 1.0 표준안인 (RFC5849) 가 발표되었다. 현재에는 OAuth2.0가 가장 많이 사용되고 있다.

 


OAuth 2.0 개념

 

주요 용어

요소 설명
Authentication 인증; 접근 자격을 검증하는 단계
Authorization 인가; 자원에 접근할 권한을 부여하는 것.
인가가 완료되면 클라이언트에게 액세스 토큰이 부여된다.
Access Token 리소스 서버 접근 권한이 담긴 토큰
Refresh Token 액세스 토큰 만료 시 갱신하기 위한 토큰

 

 

구성 요소

요소 설명
Resource Owner 리소스 소유자 또는 사용자
Client Resource server에 접근 요청하는 애플리케이션
Authorization Server 권한 서버.
클라이언트의 접근 자격을 확인하고 액세스 토큰을 발급해준다.
Resource Server 리소스(사용자 정보들)를 가지고 있는 서버.
액세스 토큰으로 접근할 수 있다.

 

 

프로토콜 종류

OAuth2.0에서는 권한 부여 방식에 따라 4개 종류의 프로토콜을 제공하고있다.

 


Authorization Code Grant (인가 코드 승인)

권한 부여 승인을 위해 자체 생성한 인가 코드를 전달하는 방식. 클라이언트가 사용자 대신 리소스 접근을 요청할 때 사용한다. 권한 서버에서 받은 인가 코드로 액세스 토큰을 발급 받고, 액세스 토큰으로 리소스를 가져올 수 있다. 가장 많이 쓰이고 기본적인 OAuth2.0 방식이다.


 

Implicit Grant (암묵적 승인)

별다른 인가 코드 없이 바로 액세스 토큰이 발급 된다. Authorization Code Grant보다 절차가 간소화되어 응답성과 효율성은 높지만 액세스 토큰이 url에 그대로 노출된다는 단점이 있다.


Resource Owner Password Credentials Grant (리소스 소유자 암호 자격 승인)

클라이언트가 암호를 사용하여 액세스 토큰에 대한 자격 증명을 교환하는 방식. 쉽게 말해 username과 password로 액세스 토큰을 발급 받는 방식이다. 따라서 클라이언트가 외부 서비스일 경우에는 적용하면 안된다. 권한 서버, 리소스 서버, 클라이언트가 모두 같은 서비스에 속해 있을 때만 사용해야한다.

 


Client Credentials Grant (클라이언트 자격 승인)

가장 간단한 방식으로 클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용된다. 이 방식은 자격증명을 안전하게 보관할 수 있는 클라이언트에서만 사용되어야 한다.

 


OAuth2.0 특징

 

OAuth1.0 vs. OAuth2.0

비교 OAuth1.0 OAuth2.0
참여자 구분 - 사용자(User)
- 이용자(Consumer)
- 서비스 제공자(Service Provider)
- 자원 소유자(Resource Owner)
- 클라이언트(Client)
- 권한 서버(Authorization Server)
- 자원 서버(Resource Server)
토큰 - Request Token
- Access Token
- Access Token
- Refresh Token
유효 기간 없음 - Access Token 유효 기간 부여
- 만료 시 Refresh Token 이용
클라이언트 웹 서비스 웹, 앱 등

 

 

달라진 점

  • 권한 서버와 자원 서버를 분리시켰다.
  • HTTPS를 이용하기 때문에 별다른 암호화(HMAC)를 필요로 하지않는다. 그에 따라 인증 절차가 간소화 되었다.
  • 웹 애플리케이션이 아닌 애플리케이션 지원이 강화되었다.
  • Refresh Token을 도입하여 Access Token의 유효 기간이 짧아졌다.

 


참고한 글

🔗 OAuth 2.0 동작 방식의 이해
🔗 OAuth 2.0 개념 정리 (그림으로 이해하기 쉽게)

'CS, WEB' 카테고리의 다른 글

프로세스와 스레드  (0) 2024.02.28
로드밸런싱이란?  (0) 2024.02.07
PASETO (Platform-Agnostic SEcurity TOkens)  (0) 2022.11.25
JWT(Json Web Token)  (0) 2022.11.20
토큰(Token) 기반 인증  (0) 2022.11.20