Network
OAuth
Dev Park
10/13/2023
28 views
서론
서버에서는 여러가지 인증방식이 있다.
오늘은 인증방식 중 하나인 OAuth에 대해서 알아보자.
OAuth란?
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 어플리케이션의 접근 권한을 부여할 수 있도록 할 수 있는 표준 프로토콜이다.
예를 들어, 쇼핑몰에서 카카오톡, 페이스북 아이디로 로그인하면 해당 사이트에서 사용자 접근권한 요청을 보내고, 사용자가 승인하면 쇼핑몰을 이용할 수 있다.
OAuth의 작동원리
OAuth는 사용자, 클라이언트, 인증서버, 리소스 서버의 4가지 주체가 밀접한 관계로 이루어진다.
사용자는 서비스를 사용하려는 사용자를 뜻한다.
클라이언트는 인증을 받아 사용하려는 서비스를 의미한다.
보통 우리가 개발하는 서비스가 될 것이다.
인증 서버는 사용자를 인증하고, 클라이언트에게 엑세스 토큰을 발급해주는 서버를 의미한다.
리소스 서버는 구글, 페이스북과 같이 사용자의 리소스를 가지고 있는 서버를 뜻한다.
다음은 OAuth가 작동하는 과정이다.
- 클라이언트 등록
- 클라이언트는 먼저 리소스 서버에 등록해야한다.
이 과정에서 클라이언트 비밀번호가 발급되며, 리디렉션 URL도 등록한다.
- 인증 요청
- 사용자가 리소스 서버의 기능을 원하면, 클라이언트는 사용자에게 인증을 요청한다.
이때 클라이언트는 사용자의 브라우저를 인증 서버로 리디렉션 한다.
- 권한 부여
- 인증 서버는 사용자에게 클라이언트에게 권한을 위임할 것인지 묻고, 동의를 받는다.
- 인증 코드 발급
- 사용자가 동의하면, 인증 서버는 사용자를 리디렉션 URL로 보내고, 이 과정에서 클라이언트에게 엑세스 토큰을 전달한다.
- 엑세스 토큰 발급
- 클라이언트는 인증 코드와 클라이언트 ID, 클라이언트 비밀번호, 리디렉션 URL을 조합하여 인증 서버에게 엑세스 토큰을 요청한다.
- 리소스 접근
- 클라이언트는 발급 받은 엑세스 토큰으로 리소스 서버의 API를 사용하여 필요한 기능을 사용한다.
이후 엑세스 토큰이 만료되면, 리프레쉬 토큰을 사용해 새로운 엑세스 토큰을 발급 받아 사용한다.
위의 과정을 통해 OAuth는 사용자의 정보를 안전하게 보호하면서, 클라이언트가 필요한 기능에 대한 접근 권한을 얻을 수 있다.
OAuth의 보안적 취약점과 방지법
- CSRF(Cross-Site Request Forgery)
- OAuth 인증 과정 중 CSRF 공격으로 피해자 계정에 공격자 계정을 연동할 수 있다.
이를 방지하기 위해 OAuth 인증 요청에 state 파라미터를 포함시켜 CSRF 공격을 방지할 수 있다.
- Covert Redirect
- redirect_uri 파라미터 값에 대한 검증이 누락되거나 미흡할 경우 발생하는 취약점이다.
공격자가 redirect_uri 값을 공격자 서버로 변조해 인증코드와 엑세스 코드를 탈취할 수 있다.
이를 방지하기 위해 인증 서버에서 redirect_uri 값에 대한 Full Path 검증을 진행해야 한다.