OAuth에 대해서 설명해주세요
면접 답변
OAuth(Open Authorization)는 사용자의 비밀번호를 공유하지 않고도, 타사 애플리케이션이 제한된 리소스에 접근할 수 있도록 하는 인증 및 권한 부여 프로토콜입니다. 주로 소셜 로그인(구글, 카카오)이나 외부 서비스 연동에 사용합니다. 다양한 역할과 인증 방법을 포함하여 유연성과 간소화된 사용자 경험을 제공하지만 보안 취약성을 방지하기 위한 구현이 필요합니다.
개념 정리
주요 구성 요소
역할
Resource Owner
리소스 소유자 또는 사용자. 구글, 페이스북 등의 플랫폼에서 리소스를 소유하고 있는 사용자
구글, 페이스북 등을 사용하여 서비스에 접근하려 하는 유저
OAuth 2.0는 사용자의 승인이 반드시 필요함
Authorization & Resource Server
Authorization Server
클라이언트가 사용자 데이터에 접근할 수 있도록 인증을 제공
승인을 받은 클라이언트에게 접근 토큰을 발행하며, 이 토큰은 클라이언트가 리소스 서버에 접근할 때 사용
Resource Server
사용자의 데이터(리소스)를 저장하는 곳
클라이언트가 이 서버를 통해 데이터에 접근함
서버는 클라이언트의 요청을 받아 인증 서버로부터 받은 접근 토큰을 검증하고, 통과한 요청에 대해서만 데이터를 제공
Client
사용자의 리소스에 접근하려는 서비스. 사용자의 명시적 승인을 통해 사용자의 리소스에 접근할 권한을 얻음 (ex:구글 로그인 동의 페이지의 사용자 정보 제공 동의 항목)
권한 부여 방식
권한 부여 승인 코드 방식(보편적으로 사용되는 방식)
리다이렉션을 통해 사용자 인증과 인가를 처리
사용자가 신뢰할 수 있는 서버에서 인증을 받음
과정: 인증요청 - 인증 - 인가 - 인증 코드 발급 - 액세스 토큰 요청 - 액세스 토큰 발급
사용자 자격증명이 클라이언트에서 노출되지 않게 하여 사용자 로그인 정보를 보호함
암묵적 승인 방식(Implicit Grant)
클라이언트 사이드 어플리케이션에서 사용
권한 부여 승인 코드 방식보다 간단함
과정: 인증 요청 - 인증 - 인가 - 토큰 발급 - 리소스 요청
단점: 액세스 토큰이 클라이언트에서 노출되므로 보안적으로 문제가 될 수 있음
CSRF(Cross-Site RequestForgery)등의 공격에 취약할 수 있기 때문에 보안을 강화하거나 다른 인증 흐름 사용이 요구됨
자원 소유자 자격증명 승인 방식(Resource Owner Password Credentials Grant)
사용자(리소스 소유자)의 ID와 비밀번호를 직접 사용하여 인증
신뢰할 수 있는 어플리케이션에서만 사용되어야함
과정: 인증 요청 - 토큰 요청 - 토큰 발급
단점: 비밀번호 변경 등의 보안 조치가 취해져야 하는 상황에서 문제가 될 수 있음
클라이언트 자격증명 승인 방식(Client Credentials Grant)
클라이언트 자체 자격 증명을 사용하여 액세스 토큰을 얻는 방법
별도의 리소스 소유자의 동의나 인증 없이 서비스를 요청할 때 유용
클라이언트 서비스가 사용자를 대신하여 사용하는 경우 사용됨
과정: 토큰 요청 - 토큰 발급
장점 : 별도 인증 과정이 필요 없음
단점 : 사용자의 리소스에 대한 액세스 권한을 제공할 수 없음
클라이언트가 직접 리소스를 소유하거나 사용자 개입이 필요없는 서비스에서 사용
OAuth 1.0과 2.0 비교
OAuth 1.0 문제점
복잡한 서명 방식 (HMAC-SHA1)
OAuth 1.0은 요청마다 서명을 생성해야함
Access Token 발급 절차의 복잡성
Request Token → Authorization → Access Token
보안성 문제
Access Token을 평문으로 전달 → 탈취가능성 있음
OAuth 2.0
단순화된 인증 흐름
복잡한 서명 생성 방식(HMAC-SHA1) 제거
Authorization 헤더를 통해 Access Token을 전달 → 구현이 간편함
Access Token을 Base64로 인코딩된 Bearer Token 방식으로 전달
SSL/TLS를 통한 보안 강화
민감한 정보가 평문으로 노출되지 않으며, Access Token도 안전하게 전달됨
기본적으로 HTTPS를 사용하도록 권장
Access Token과 Refresh Token으로 권한 관리 효율화
Access Token은 짧은 만료 시간을 통해 보안성을 강화
Refresh Token은 만료된 Access Token을 갱신할 수 있음
꼬리 질문
OAuth의 흐름을 설명해주세요
OAuth 토큰의 종류와 용도, 사용 방식에 대해 설명해주세요
OAuth 2.0에서 Access Token과 Refresh Token의 차이점은 무엇인가요?
Last updated