[Weekly Paper] week.10 | OAuth란?

MJamong·2024년 11월 5일

weekly-paper

목록 보기
11/14
post-thumbnail

✔ OAuth

OAuth(Open Authorization)는 타사 애플리케이션이 사용자의 자격 증명을 직접 요청하지 않고도, 안전하게 자원에 접근할 수 있도록 권한을 위임하는 인증 프로토콜로 사용자와 직접적인 상호 작용 없이 다른 서비스에 접근할 수 있게 하는 점에서 특히 보안에 중요한 역할을 하며, 주로 웹 애플리케이션, 모바일 애플리케이션, API를 위한 인증 및 권한 부여 방법으로 널리 사용된다.

🎢 OAuth의 작동 방식

OAuth는 클라이언트(애플리케이션)가 자원 소유자(사용자)의 자원을 접근하려고 할 때, 자격 증명 없이도 자원을 안전하게 이용할 수 있게 해준다. 이때 OAuth는 클라이언트가 직접적으로 자원에 접근하지 않고, 자원 소유자의 권한을 위임받아 자원에 접근하는 구조다.

일반적으로 OAuth에는 네 가지 역할이 있다.

  1. 자원 소유자(Resource Owner): 자원을 소유한 사용자, 예를 들어 소셜 미디어 계정의 사용자
  2. 클라이언트(Client): 자원 소유자의 허가를 받아 자원에 접근하고자 하는 애플리케이션
  3. 자원 서버(Resource Server): 자원을 관리하는 서버로, API를 통해 자원에 접근
  4. 권한 서버(Authorization Server): 사용자의 권한을 확인하고, 클라이언트에게 액세스 토큰을 발급

OAuth는 사용자에게 클라이언트에 자원에 접근할 권한을 줄 수 있도록 하여, 클라이언트가 사용자 자격 증명(아이디, 비밀번호 등)을 요구하지 않아도 되도록 설계되었다. 이 과정에서 사용자가 클라이언트 애플리케이션에 권한을 부여하면 권한 서버는 클라이언트에게 액세스 토큰을 발급한다. 클라이언트는 이 토큰을 사용해 자원 서버에 자원을 요청하고, 자원 서버는 이 토큰을 확인해 권한이 유효한지 확인한 후 자원에 접근을 허용한다.


🩹 OAuth를 사용하는 이유

1. 보안 강화

OAuth는 타사 애플리케이션이 사용자 자격 증명을 직접적으로 다루지 않게 하기 때문에 보안을 강화한다. 이를 통해 클라이언트 애플리케이션이 사용자 이름과 비밀번호를 직접 요청하지 않고, 사용자 데이터에 안전하게 접근할 수 있게 한다.

2. 편리한 인증 및 권한 부여

사용자는 자격 증명을 한 번만 제공하여 여러 애플리케이션에서 자신의 데이터를 안전하게 공유할 수 있다. 예를 들어, 타사 애플리케이션에 소셜 미디어 계정을 연동하여 간편하게 로그인할 수 있다.

3. 접근 범위와 시간 제한

OAuth는 특정 자원에 대한 접근 권한을 제한하거나 특정 기간 동안만 권한을 부여할 수 있도록 지원한다. 예를들어, 사용자에게 일정 시간 동안만 접근 권한을 주거나, 일부 데이터만 접근할 수 있도록 설정할 수 있다.

4. 서드파티 애플리케이션과의 통합 융이

OAuth는 다양한 애플리케이션 간에 안전하게 데이터를 공유하고 통합할 수 있게 해준다. 예를 들어, 구글 계정을 사용해 다른 서비스에 쉽게 로그인하거나 구글 캘린더 데이터를 다른 앱과 연동할 수 있다.


🙋‍♂️ 예시: OAuth를 이용한 소셜 로그인

OAuth를 활용한 소셜 로그인 흐름을 예로들 수 있다.

  1. 클라이언트 요청: 사용자가 클라이언트 애플리케이션에서 "구글로 로그인" 버튼을 클릭
  2. 권한 요청: 구글이 사용자에게 로그인 권한을 부여할 것인지 확인하며, 사용자는 권한을 승인
  3. 액세스 토큰 발급: 사용자가 권한을 승인하면, 구글은 클라이언트 애플리케이션에 액세스 토큰을 발급
  4. 자원 접근: 클라이언트 애플리케이션은 구글 서버에 액세스 토큰을 사용하여 자원(예: 사용자 프로필 정보)에 접근
  5. 서비스 제공: 클라이언트 애플리케이션은 가져온 사용자 정보를 통해 로그인한 사용자에게 맞춤형 서비스를 제공

✍ 요약

  • OAuth는 보안성과 편리함을 모두 제공해 다양한 애플리케이션의 통합을 원활히 하며, 특히 사용자 인증과 권한 부여에서 중요한 역할을 합니다.
profile
모르면 알아가야지🚀

0개의 댓글