들어가기
애플리케이션 보안과 인증의 영역을 제대로 이해하기 위해서는, OAuth, JWT, SSO 등의 핵심적인 인증 표준에 익숙해져야 합니다. 개발자가 애플리케이션의 인증 스택을 이용하거나 직접 구축하는 데 반드시 맞닥뜨리게 되는 핵심 표준에 대해 다뤄보도록 하겠습니다.
오늘은 OAuth(Open Authorization) 에 대해 알아보도록 하겠습니다.
- OAuth란 무엇인가요?
- OAuth의 핵심 주체는 누구인가요?
- OAuth는 어떻게 동작하나요?
- OAuth에서 액세스 토큰이 무엇인가요?
- OAuth의 문제와 한계
OAuth란 무엇인가요?
서비스를 이용하면서 다음과 같은 로그인 화면을 만나 보셨을 겁니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcd03b93018282e284c41d_OAuth(dark).png)
위처럼 애플리케이션을 이용할 때 구글, 카카오 등 제 3의 서비스에 저장된 계정 정보를 그대로 가져와 로그인 할 수 있는 기능은 OAuth라는 인증 표준을 통해 구현되었습니다.
OAuth란 Open Authorization의 약자입니다. 애플리케이션이 특정 시스템의 보호된 리소스에 접근하기 위해, 사용자 인증(Authentication)을 통해 사용자의 리소스 접근 권한(Authorization)을 위임받는 것을 의미합니다. Authentication과 Authorization의 차이는 간단하게 다음과 같습니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcd2cd100f033016060571_auth.png)
OAuth의 핵심 주체는 누구인가요?
다음과 같이 크게 세 가지 주체로 나눌 수 있습니다.
Resource Owner(or User)
- 리소스를 소유한 사용자로, 애플리케이션의 리소스 공유 요청을 허가할 수 있습니다.
Client(or Consumer)
- 사용자의 허가를 받아 사용자의 리소스에 접근할 수 있도록 요청하는 응용 애플리케이션입니다.
Server(or Provider)
- 사용자의 허가를 검증하고, 클라이언트에 응용 애플리케이션에 보유한 사용자의 리소스를 공유하는 서버입니다.
- 일반적으로 허가를 담당하는 검증 서버(Authorization Server)와 실제 사용자 리소스를 보유한 리소스 서버(Resource Server, or API Server)로 분리되어 있습니다.
OAuth는 어떻게 동작하나요?
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcf92744ce0a13caaa1ce6_Flow(black).png)
- 리소스 소유자(이하 유저)가 클라이언트 서비스를 이용하고자 이용 요청을 보냅니다.
- 클라이언트는 검증 서버에 액세스 토큰을 요청합니다.
- 검증 서버는 유저에게 인가 동의를 요청합니다.
- 유저는 인가 동의를 응답합니다.
- 검증 서버는 리소스에 접근할 수 있는 액세스 토큰을 생성해 클라이언트로 전송합니다.
- 클라이언트는 액세스 토큰을 저장합니다.
- 클라이언트는 액세스 토큰을 가지고 리소스 서버에 요청을 보냅니다.
- 리소스 서버는 액세스 토큰의 유효성을 파악하고 나서, 요청한 리소스를 클라이언트에 응답합니다.
- 클라이언트는 유저에 서비스 이용을 응답합니다.
OAuth에서 액세스 토큰이 무엇인가요?
발급
OAuth에서 가장 중요한 개념은 바로 액세스 토큰입니다. 클라이언트는 액세스 토큰을 통해 사용자의 리소스에 접근할 수 있습니다. 클라이언트가 액세스 토큰을 얻을 때 사용되는 자격 증명 방식으로는 아래 4가지가 있습니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcfa7a3fcf7e5c8c547749_desc.png)
내용
클라이언트가 검증 서버로부터 성공적으로 액세스 토큰 정보를 받아오면, 다음과 같은 정보를 받아올 수 있습니다. 다음은 Google의 액세스 토큰 간소화 예시입니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcfd3e361de6545d78cfff_accessToken.png)
각 필드가 의미하는 바는 다음과 같습니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dcfede62dc9d07b473ed4f_access_desc.png)
갱신
액세스 토큰은 갱신 주기가 짧기 때문에, 만료 시마다 다시 자격 증명을 통해 서버에 토큰을 요청해야 합니다. 이를 통해 발생하는 불편을 경감시키기 위해, 서버에서는 리프레시 토큰을 추가로 발급하여, 리프레시 토큰이 유효한 경우 액세스 토큰을 재발급해 줍니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd0014871676422e04f47b_Refresh.png)
OAuth의 문제와 한계
OAuth 인터페이스에는 유저 정보에 대한 표준이 없어, 각 서비스 제공자마다 유저데이터를 다른 방식으로 넘겨주기 때문에 클라이언트가 각각의 인터페이스에 개별적으로 대응해야 한다는 불편이 있습니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd0273e4a9e82129f0f8fd_google.png)
카카오
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd0303f5b7127a7f247205_kakao.png)
네이버
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd033ae25b74996760722a_naver.png)
마무리
지금까지 OAuth의 개념 및 동작 원리에 대해 알아보았습니다. Furo에서는 OAuth를 콘솔 기반으로 API Key 를 입력하면 3분만에 구글, 카카오, 네이버 OAuth 를 연동해 주는 기능을 제공합니다.
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd054a5215c9330673ecb2_furo.png)
![](https://cdn.prod.website-files.com/63c5b901cd7afa74910787fd/63dd03d63fb8343cb7f2ea87_console.png)
또한, 사용자 정보를 표준화된 단일 인터페이스로 제공해주어 클라이언트에서 편리하게 유저 정보를 사용할 수 있습니다.
Furo에 대해 더 알고 싶으신가요? Furo 공식 문서를 살펴 보세요.