OAuth2.0이란?

OAuth 2.0의 개념과 목적

OAuth 2.0은 웹 또는 모바일 애플리케이션과 같은 타사 애플리케이션이 사용자 인증 정보를 안전하게 사용할 수 있도록 하는 인증 및 권한 부여 프레임워크입니다.

OAuth 2.0의 주요 목적은 타사 응용 프로그램이 사용자 개인 정보(예: 이메일, 친구 목록 등)에 안전하게 액세스할 수 있도록 하는 것입니다.

예를 들어 회사 B가 Google 캘린더 API에 액세스하기 위해 사용자의 Google ID와 비밀번호를 요구하지 않으면 Google이 로그인을 처리하고 사용자가 Google 캘린더 API에 대한 액세스 권한을 부여한 다음 회사 B가 해당 권한을 부여합니다. Google 캘린더 API에 액세스합니다.

이를 위해 OAuth 2.0에서는 B사가 Google에 등록한 클라이언트 ID와 클라이언트 시크릿을 이용하여 인증을 수행한다. 인증이 완료되면 액세스 토큰을 발급받아 API를 호출할 수 있습니다.

따라서 OAuth 2.0은 웹 기술에서 널리 사용되며 Facebook, Google, Twitter 및 GitHub와 같은 다양한 서비스에서 제공됩니다. 이를 통해 사용자는 각 서비스에서 다양한 타사 애플리케이션을 사용하고 개인 정보를 안전하게 관리할 수 있습니다.

OAuth 2.0의 구성 요소

OAuth 2.0은 인증 및 권한 부여를 위한 프로토콜이며 다음 네 가지 개념을 사용합니다.

  1. 리소스 소유자는 리소스에 대한 액세스 권한이 있는 사용자입니다. 이 사용자는 일반적으로 서비스 제공자 또는 소유자일 수 있습니다.
  2. OAuth 클라이언트는 리소스 서버에 접근하기 위해 인증을 요청합니다.
  3. 리소스 서버는 요청한 리소스에 대한 접근 권한을 확인하고 해당 리소스에 대한 API를 제공하는 서버입니다. 클라이언트가 리소스에 액세스하려고 하면 리소스 서버는 클라이언트의 권한을 확인하고 유효한 경우 리소스를 반환합니다.
  4. 인증 서버는 클라이언트 인증 및 액세스 권한을 처리하는 서버를 말합니다. 클라이언트는 인증 서버를 통해 ID를 인증하고 리소스 서버에 액세스할 수 있는 권한이 부여됩니다.

OAuth 2.0의 개념과 목적을 설명하면서 들었던 예시들을 다시 살펴보면, B사의 APP을 사용하는 사용자는 Resource Owner가 되고 Google은 Resource Server 및 Auth Server가 됩니다.


인증 코드 부여의 인증 프로세스

인증 코드 발급과정

OAuth 2.0의 인증코드 방식은 다음과 같은 과정으로 구성된다.

  1. 사용자는 클라이언트에 Google 캘린더 목록을 보냅니다.
  2. 클라이언트는 리소스 소유자가 인증 코드를 요청할 수 있는 링크를 전달합니다.
  3. 리소스 소유자는 링크를 클릭하고 인증 서버에 로그인을 시도합니다.
  4. 로그인에 성공하면 인증 서버는 리소스 소유자를 인증 코드가 포함된 리디렉션 URL로 리디렉션합니다.


액세스 토큰 발급 프로세스

OAuth 2.0의 Authorization Code Grant 방식에서 Access Token을 발급하는 과정은 다음과 같습니다.

  1. 클라이언트는 Redirect URL에 포함된 Authorization Code를 사용하여 Auth Server에 Access Token 발급을 요청합니다.
  2. Auth Server는 Client ID, Secret, Redirect URL, Resource Owner ID, Authorization Code 정보를 확인합니다.
  3. 인증 정보가 정확하면 Auth Server에서 Access Token을 발급합니다.
  4. 발급된 Access Token을 사용하여 Resource Server에서 보호하는 리소스에 접근할 수 있습니다.


액세스 토큰과 새로 고침 토큰

Access Token과 Refresh Token은 OAuth2.0에서 사용하는 인증 토큰입니다.

Access Token은 사용자 인증 후 발급되며 API 호출 시 인증 정보로 사용됩니다. 일반적으로 액세스 토큰에는 유효 기간이 있으며 만료되면 다시 인증을 수행해야 합니다.

갱신 토큰은 액세스 토큰이 만료되어 액세스 토큰을 갱신해야 하는 경우에 사용됩니다. Refresh 토큰은 액세스 토큰과 별도로 발행되며 일반적으로 액세스 토큰보다 유효 기간이 더 깁니다. 새로 고침 토큰을 사용하면 사용자가 다시 로그인하지 않고도 액세스 토큰을 자동으로 갱신할 수 있습니다.

새로 고침 토큰은 일반적으로 액세스 토큰보다 더 안전합니다. 따라서 Refresh Token은 안전하게 보관해야 하며 Access Token과 달리 암호화하여 보관하여 보안을 강화할 수 있습니다.

아래 그림은 Refresh Token을 이용하여 Access Token을 발급받는 과정을 나타낸 것입니다.


에프

Authorization Code Grant 방식의 장단점

장점

  1. 액세스 토큰은 브라우저를 거치지 않고 서버 측에서 안전하게 관리할 수 있어 보안성이 높다.
  2. Authorization Code가 유출되더라도 이를 이용하여 Access Token을 얻기 위해서는 추가 인증이 필요하기 때문에 안전합니다.
  3. Refresh Token을 이용하여 Access Token의 유효기간을 연장할 수 있어 사용자가 자주 로그인하지 않아도 되는 편의성을 제공합니다.
  4. 자원 소유자의 사용자 정보가 외부에 노출되지 않아 개인정보 보호에 탁월합니다.

불리

  1. Access Token을 얻기 위해서는 여러 단계의 인증 과정이 필요하고, API 서버와 인증 서버의 별도 관리가 필요하기 때문에 복잡합니다.
  2. 추가 요청 및 응답이 필요할 수 있으며 이로 인해 사용자 경험이 저하될 수 있습니다.
  3. 인증 서버와 API 서버가 분리되어 있기 때문에 동시에 실패할 경우 사용자 인증 과정에서 문제가 발생할 수 있습니다.

결론

최신 인증 방식인 OAuth 2.0은 서로 다른 웹 서비스 간의 인증을 효과적으로 수행할 수 있는 프로토콜입니다. 이를 통해 사용자는 하나의 아이디와 비밀번호로 여러 웹 서비스에 접근할 수 있으며, 웹 서비스 간의 연동이 보다 쉬워집니다.

그러나 OAuth 2.0에도 보안 취약점이 있으므로 이를 해결하기 위한 여러 조치가 필요합니다. 예를 들어 안전한 인증을 위해 HTTPS 프로토콜을 사용하고 액세스 토큰의 유효 기간을 제한하는 등의 조치가 필요합니다.

따라서 OAuth 2.0을 안전하게 사용하기 위해서는 이를 적용하는 모든 웹 서비스의 보안성을 철저히 검토하고 적절한 보안 조치를 취해야 합니다. 이러한 노력은 미래의 보안 문제를 예방하는 데 큰 도움이 될 것입니다.