OAuth (Open Authorization)는 애플리케이션 간 안전하게 인증과 권한을 위임할 수 있도록 도와주는 인증 프로토콜임. OAuth를 통해 사용자 정보에 대한 접근 권한을 다른 애플리케이션에 제공할 수 있으며, 비밀번호를 공유하지 않고도 안전하게 인증할 수 있음. 흔히 소셜 로그인을 제공할 때 사용하는 방법이 OAuth임.
OAuth는 사용자 인증을 위해 여러 개념이 상호작용함. 주로 리소스 소유자, 클라이언트 애플리케이션, 권한 서버, 자원 서버의 네 가지 주요 구성 요소로 나뉨.
1) 사용자 요청: 사용자가 클라이언트 애플리케이션(예: 웹사이트)에서 로그인을 시도함.
2) 사용자 동의: 클라이언트 애플리케이션은 권한 서버(예: Google)로 리디렉션하며, 사용자가 동의 화면에서 로그인 및 권한을 부여함.
3) 인가 코드 발급: 권한 서버는 사용자가 권한을 부여하면 클라이언트 애플리케이션에 인가 코드를 발급함.
4) 토큰 발급: 클라이언트 애플리케이션은 인가 코드를 권한 서버로 다시 보내고, 액세스 토큰을 발급받음.
5) 데이터 접근: 클라이언트 애플리케이션은 발급받은 액세스 토큰을 사용해 자원 서버에서 사용자 데이터를 요청하고, 필요한 정보를 얻음.
액세스 토큰은 권한 서버가 클라이언트 애플리케이션에 부여하는 임시 키로, 이 토큰을 사용해 자원 서버에 데이터를 요청할 수 있음. 보통 짧은 유효 기간을 가짐.
리프레시 토큰은 액세스 토큰이 만료된 후 새로운 액세스 토큰을 발급받을 때 사용하는 토큰임. 사용자 재인증 없이도 새 액세스 토큰을 발급받을 수 있게 해 주기 때문에 보통 장기 유효 기간을 가짐.
OAuth 1.0: 초기 OAuth 프로토콜로, 구현이 복잡하고 암호화 요구사항이 있었음.
OAuth 2.0: 현재 표준 OAuth 버전으로, 단순하고 유연하며 다양한 인증 방법을 지원함. 보안성과 확장성이 높아 많이 사용됨.