OAuth2에 대해 알아보자

찬근·2023년 3월 19일
0
post-thumbnail

정의

OAuth 2.0 is the industry-standard protocol for authorization.

An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.

위는 OAuth2 문서에서 정의한 OAuth2의 정의입니다.
번역해보면 다음과 같이 정리될 수 있습니다.

웹, 모바일, 데스크톱 앱 등을 대상으로 하는 Authorization을 위한 프로토콜


Role

OAuth2는 4가지 Role를 정의합니다.

  • Resource Owner : 보호된 자원을 요청하고자 하는 Entity
  • Client : Resource Owner를 대신하여 보호된 자원을 요청하는 Application
  • Authorization Server : Resource Owner를 인증하고, 인증에 성공한 경우 Client에게 Access Token을 발급하는 서버
  • Resource server : 보호된 자원을 호스팅하는 서버

이 글에서는 이해를 돕기 위해,

  • Resource Owner를 개인 사용자( User )로.
  • Client를 Web App(React, Anguler 등)으로

가정하겠습니다.


Flow

OAuth2는 여러가지 Flow를 가지고 있습니다.
이 글에서는 가장 기본이 되는 Authorization Code Flow를 알아보겠습니다.

위는 Authorization Code Flow의 한 예시입니다. 기본적으로 OAuth2가 유연하고 확장 가능하기 때문입니다. 하지만 근본적인 내용은 비슷합니다.

위 순차 다이어그램을 정리해보면 다음과 같습니다.

  1. 인증되지 않은 User가 보호된 자원을 접근합니다.
  2. Client는 Client가 가지고 있는 response_type, scope, client_id, redirect_uri 등의 정보와 함께 Authorization 서버로 Redirect를 수행합니다.
  3. Authorization Server에서는 User에게 로그인 페이지를 제공합니다.
  4. User는 로그인을 수행합니다.
  5. Authorization Server는 User를 검증하고, 검증에 성공하면 auth code와 함께 2번에서 획득한 redirect_uri로 Redirect를 수행합니다.
  6. Client는 5번에서 획득한 auth code와 grant_type, client_id, client_secret, redirect_uri 등의 정보와 함께 Authorization 서버에게 access token을 요청합니다.
  7. Authorization Server는 Client를 검증하고 access token을 발급합니다.
  8. Client는 1번에서 User가 접근하고자 한 자원을 Resource Server에게 요청합니다. 이때, 7번에서 획득한 access token을 함께 보냅니다.
  9. Resource Server는 Authorization Server를 통해 access token을 검증하고 보호된 자원을 Client에게 반환합니다.

장점

OAuth2를 적용하면 어떤 장점들이 있는지 알아봅시다.

  • 보안성: OAuth2는 인증 정보를 제 3자에게 노출하지 않고도 인증을 수행할 수 있도록 합니다. 인증 서버에서는 인증 정보를 안전하게 보호하고, 애플리케이션은 인증 토큰을 통해 API에 대한 인증을 수행합니다.

  • 유연성: OAuth2는 다양한 인증 방법과 토큰 유형을 지원합니다. 이를 통해 API 제공 업체와 애플리케이션 개발자 모두가 적절한 인증 방법을 선택하고, 필요에 따라 토큰 유형을 지원할 수 있습니다.

  • 사용자 경험: OAuth2는 사용자가 인증 정보를 자주 입력하지 않고도 다양한 애플리케이션에 대한 액세스를 허용합니다. 이를 통해 사용자는 더욱 편리한 인증 경험을 얻을 수 있습니다.

  • API 보호: OAuth2는 API 제공 업체가 API를 보호하는 데 도움이 됩니다. 인증 서버를 통해 API에 액세스하는 애플리케이션을 관리할 수 있으며, 권한이 없는 액세스를 방지할 수 있습니다.

  • 확장성: OAuth2는 다양한 프로그래밍 언어와 플랫폼에서 사용할 수 있습니다. 이를 통해 API를 사용하는 애플리케이션 개발자는 쉽게 OAuth2를 구현하고 사용할 수 있습니다.


단점

  • 복잡성: OAuth2는 구현이 복잡하고, 구성이 어려울 수 있습니다. 서로 다른 인증 및 권한 부여 흐름을 구성하고, 클라이언트 및 서버 사이에서 필요한 토큰 교환을 관리해야 하기 때문입니다. 이러한 복잡성은 시간과 비용이 많이 드는 구현을 유발할 수 있습니다.

  • 보안성: OAuth2는 대부분의 보안 문제를 해결하고, 중요한 개인 정보를 보호합니다. 그러나 매우 중요한 시스템이나 높은 보안 요구 사항이 있는 경우에는, 추가적인 보안 관련 구현이 필요할 수 있습니다.

  • 토큰 유효성: OAuth2는 토큰 유효성 검사를 제공하지만, 만료된 토큰을 처리하는 방법은 클라이언트 응용 프로그램에 따라 다를 수 있습니다. 만료된 토큰 처리가 제대로 이루어지지 않으면, 보안 문제가 발생할 수 있습니다.


정리

이 글에서는 OAuth2에 대해 알아보았습니다. 이에 대한 제 생각을 간단히 정리해보겠습니다.

  • OAuth2는 유연하고 확장 가능하지만 그 만큼 복잡합니다.
  • OAuth2를 적절하게 사용하면 사용자에게 편리함을 제공할 수 있습니다.
  • 만료된 토큰에 대한 처리, 권한 범위(scope) 설정 등의 요소들을 잘 고려해서 프로젝트에 적용하는 것이 좋습니다.
profile
일관성 있는 개발자

0개의 댓글