Coding History

OAuto2 가 무엇인가?

BlackBirdIT 2024. 9. 3. 14:34

구글 로그인 기능 구현중, 이제 OAuto2인증에 관련된 정보들을 보게 되었다. 보니까 없이도 로그인 기능 자체는 만들 수 있을 것 같긴한데 죄다 이걸 사용하니까, 이게 대체 무엇인가에 대한 궁금증이 들어서 한번 알아보려고 한다.

OAuth2란 무엇인가?

OAuth2는 "Open Authorization 2.0"의 약자로, 인터넷 사용자가 애플리케이션(예: 웹사이트, 모바일 앱)이 사용자 비밀번호를 직접 저장하거나 처리하지 않고 다른 애플리케이션이나 서비스의 리소스에 접근할 수 있도록 허용하는 인증 프로토콜이다. OAuth2는 사용자와 애플리케이션 간의 안전한 인증을 위해 설계되었다.

OAuth2의 주요 개념

  1. 리소스 소유자 (Resource Owner): 일반적으로 애플리케이션의 사용자로, 자신의 리소스에 접근할 수 있는 권한을 가지고 있다.

  2. 클라이언트 (Client): 사용자의 자원에 접근하려고 하는 애플리케이션이다. 클라이언트는 사용자의 허락을 받고, 특정 리소스에 접근하기 위해 인증 서버와 상호작용한다.

  3. 리소스 서버 (Resource Server): 사용자의 리소스(데이터)를 호스팅하고 있는 서버다. 예를 들어, Google Drive의 파일이나 Facebook의 사용자 프로필이 리소스가 될 수 있다.

  4. 인증 서버 (Authorization Server): 리소스 서버에 접근하기 위한 액세스 토큰을 발급하는 서버다. 사용자의 인증과 권한 부여 절차를 처리한다.

  5. 액세스 토큰 (Access Token): 클라이언트가 리소스 서버에서 리소스에 접근할 수 있도록 허용하는 토큰이다. 이 토큰은 제한된 시간 동안만 유효하며, 제한된 범위 내에서만 사용될 수 있다.

OAuth2의 사용 시나리오

OAuth2는 여러 상황에서 유용하게 사용한다. 예를 들어:

  1. 소셜 로그인: Facebook, Google, GitHub 등의 계정을 사용하여 웹사이트나 애플리케이션에 로그인할 수 있게 하는 기능이다. 사용자는 웹사이트에 새로운 계정을 만들 필요 없이, 기존 소셜 미디어 계정을 사용하여 간편하게 로그인할 수 있다.

  2. 서드파티 애플리케이션: 사용자가 특정 애플리케이션(예: 트위터 클라이언트)에 트위터 계정으로 트윗을 게시할 수 있도록 허용하는 경우다. 이 경우 애플리케이션은 사용자의 트위터 비밀번호를 알 필요 없이, OAuth2를 통해 필요한 권한을 받아 트윗을 게시할 수 있습니다.

OAuth2의 장점

  1. 보안성: OAuth2는 애플리케이션이 사용자의 비밀번호를 직접 저장하거나 처리하지 않도록 하여 보안을 강화한다. 사용자의 비밀번호가 애플리케이션에 노출되지 않으므로, 비밀번호 관리의 부담이 줄어든다.

  2. 편의성: 사용자 입장에서 소셜 미디어나 다른 서비스의 계정을 사용하여 간편하게 로그인할 수 있으므로, 새로운 계정을 만들 필요가 없다.

  3. 유연성: OAuth2는 다양한 클라이언트 및 서버와 함께 사용할 수 있도록 설계되어 있다. 이를 통해 다양한 인증 및 권한 부여 시나리오에 적용할 수 있다.

  4. 확장성: OAuth2는 다양한 사용 사례를 지원하며, 클라이언트 애플리케이션과 서버 사이의 상호작용을 간단하게 만들어 준다.

OAuth2의 동작 방식

  1. 사용자 승인 요청: 클라이언트 애플리케이션이 사용자의 리소스에 접근하기 위해 사용자의 승인(권한)을 요청한다.

  2. 사용자 승인: 사용자가 요청을 승인하면, 인증 서버는 클라이언트 애플리케이션에 "승인 코드"를 발급한다.

  3. 액세스 토큰 요청: 클라이언트 애플리케이션은 인증 서버에 승인 코드를 보내고, 액세스 토큰을 요청한다.

  4. 액세스 토큰 발급: 인증 서버는 승인 코드를 확인하고, 클라이언트 애플리케이션에 액세스 토큰을 발급한다.

  5. 리소스 서버에 요청: 클라이언트 애플리케이션은 액세스 토큰을 사용하여 리소스 서버에 요청을 보내고, 사용자의 리소스에 접근한다.

이 과정을 통해 OAuth2는 사용자와 클라이언트 애플리케이션 간의 안전한 인증 및 권한 부여를 처리한다.