🔐 OAuth(Open Authorization)
OAuth(open authorizaiton)란 우리말로 '개방형 접근 권한 표준'라고 하며,
민감한 정보는 제공하지 않으면서 제3자의 보호된 리소스에 접근할 수 있게 해주는 프로토콜입니다.
다양한 플랫폼에 저장된 사용자의 데이터에 접근하기 위해, 현재 사용자가 접속한 사이트가 다른 플랫폼이 가지고 있는 접근 권한을 위임받는 것입니다.
🔐 OIDC(OpenID Connection)
OIDC(openID connection)란 단순히 접근 권한을 넘겨받는 것에서 더 나아가 인증까지 한번에 하고 싶은 경우에 사용하는 프로토콜입니다.
앞서 살펴본 OAuth(인가)에 + 인증이 더해진 개념으로, OAuth 2.0 프로토콜을 기반으로 상위 계층에서 편리하게 인증을 수행합니다.
예를 들어, 어떤 사이트에 로그인을 할 때 구글이나 카카오톡 및 네이버 등을 활용하여 '소셜 로그인'을 수행할 때 활용됩니다.
그리고 여기서 구글이나 카카오톡 및 네이버와 같은 플랫폼을 OIDC 프로바이더(provider)라고 합니다.
OIDC의 워크플로우는 다음과 같습니다.
- 사용자가 웹 사이트에서 소셜 로그인을 진행합니다.
- 브라우저(프론트엔드)는 프로바이더(ex-구글) 서버에게 소셜 로그인 요청을 보냅니다.
- 프로바이더는 자신의 로그인 페이지를 띄워 사용자를 인증합니다.
- 사용자 인증에 성공하면 프로바이더 서버는 브라우저에게 인증 코드(authorization code)를 반환합니다.
- 브라우저가 인증 코드를 백엔드 서버에게 전달합니다.
- 백엔드 서버는 인증 코드+아이디 토큰(JWT 방식)이 담긴 요청을 프로바이더 서버에게 보냅니다.
- 아이디 토큰에 담긴 내용을 읽어 해당하는 사용자가 존재한다면 로그인 처리를, 없다면 해당 사용자를 새로 생성합니다.
🔐 OAuth와 OIDC의 차이
OAuth는 이름 그대로 리소스에 접근할 수 있는 권한을 얻는 인가 기술입니다.
리소스 서버는 인증에 성공한 사용자에게 자신의 리소스에 접근할 수 있는 엑세스 토큰을 발행해줍니다.
따라서 실제 정보를 얻기 위해 사용자는 다시 리소스 서버에게 사용자의 정보를 요청하는 토큰이 포함된 리퀘스트를 보내야 합니다.
OIDC는 인가와 인증을 한번에 수행하는 기술입니다.
리소스 서버가 발급해준 엑세스 토큰에는 토큰에 대한 정보뿐만 아니라 민감하지 않은 실제 사용자의 정보도 포함되어 있습니다.
따라서 토큰으로 한 번 더 요청해야 하는 OAuth와는 달리, 토큰과 사용자 정보를 함께 받아 서버에게 보내는 리퀘스트의 빈도를 줄일 수 있게 됩니다.
읽어주셔서 감사합니다:)