main

OAuth

Articles
8

액세스 토큰과 리프레시 토큰 방식으로 이뤄지는 로그인 이외에도 대체로 많은 서비스들이
소셜로그인을 통해서 로그인 하는 OAuth방식을 선호하고 있습니다.

오늘은 OAuth에 대해서 알아보고, OAuth1과 OAuth2의 차이에 대해서도 알아보고자합니다.

Authentication vs Authorization

먼저 내용을 시작하기 전, 이 둘의 차이를 아시나요?
Authentication인증을 뜻하고, Authorization인가를 뜻합니다.
즉, 유저가 로그인하고, 자신임을 증명하는 것을 인증이라고 해석할 수 있고,
서버쪽에서 인증정보를 확인하고 세션ID나 토큰을 발급해주는 것을 인가라고 할 수 있습니다.

OAuth

등장배경

그럼 OAuth란 무엇일까요? 하나의 서비스를 이용하기 위해서 이전에는 매번 우리는 아이디를 생성해야하고,
나의 개인정보를 하나씩 다 입력해야했습니다. 따라서 서비스를 둘러보기 위해서 늘 가입을 해야하고,
우리의 개인정보를 제공해야하는 불편함이 있었던 것이죠.

그리고 각각의 서비스의 보안수준이 모두 달랐기 때문에,
유저입장에서 개인정보가 쉽게 탈취될 수 있는 서비스인지 구분하기도 어려웠습니다.

또한 회사마다 인증방식이 모두 달랐기 때문에 이때는 인증표준방식이 없었습니다.

따라서 등장한 것이 OAuth 입니다.

OAuth: 애플리케이션 인증을 위한 접근 관련 개방형 표준 프로토콜
쉽게 말해 유저들이 자신에 대한 정보를 사용하려는 서비스에게 타서비스에 로그인해 접근권한을 위임해주는 것을 말한다.

따라서 OAuth가 생긴 이후에는 쉽게 소셜로그인에 로그인만해도 서비스를 이용 할 수 있게 되었어요.

우리는 로그인을 할 때 내 개인정보를 입력하지 않고 하나의 플랫폼에서 로그인만 한다면
그 플랫폼에서 유저가 이용하려는 서비스에게 접근 권한을 주어, 유저의 개인정보를 얻어내는 방식입니다.


인증방식

230927-141439

1. 유저가 한 서비스에 네이버로 로그인하겠다고 요청한다.
2. 서비스는 네이버 로그인 페이지으로 연결시켜준다.
3. 유저가 로그인한다.
4. 액세스 토큰을 유저가 사용하려는 서비스에게 전달한다.
5. 서비스는 액세스 토큰을 전달받고, 토큰을 가지고 네이버에 사용자 정보를 요청한다.
6. 네이버는 토큰이 유효한지 검사한다.
7. 유효하다면 서비스에게 사용자 정보를 건네준다.

따라서 위와 같은 방식으로 유저는 자신의 정보를 안전하게 전달할 수 있고 간편하게 서비스를 사용할 수 있게 됩니다.
여기서 OAuth1은 토큰을 전달하는 서버와, 정보를 전달해주는 역할 구분이 모호했다는 점이 있었습니다.
또한 https로 전달하는 것이 필수가 아니었기 때문에 이에 대한 구현방식이 복잡했었습니다.


OAuth2의 등장배경

그럼 OAuth1과 OAuth2의 차이는 뭘까요?
방금 위에서 설명된 OAuth1은 https가 아닌 http에서도 발급이 가능했고, 액세스 토큰을 받으면 액세스토큰을 계속 사용할 수 있었습니다. 또한 웹 애플리케이션에서 대체적으로 사용하던 방식이었습니다.

또한 OAuth1에서는 Authorization ServerResource Server의 구분이 모호했습니다.
인증을 해주는 서버와 정보를 전달해주는 서버와의 구분이 모호했음


OAuth1과 OAuth2의 차이점

  • 따라서 OAuth2에서는 https를 통해서만 토큰 발급
  • 액세스 토큰의 유효기간을 설정
  • 기존에 사용하던 용어도 바뀌면서 Authorization ServerResource Server의 명시적 분리
  • 또한 인증 절차가 더 간소화되면서 개발자들이 구현하기 쉬워짐
  • 웹 뿐만 아니라 모바일 애플리케이션에서도 사용가능

한마디로 OAuth1과 OAuth2의 차이점을 말하자면,

범용성, 역할의 구분, 구현의 간소화 라고 할 수 있겠습니다.

OAuth2는 다양한 구현방식이 있는데요, 대표적으로 Authorization Code Grant Type입니다. 이는 액세스 토큰을 발급 받기 이전에, 또 다른 권한증인 Authorization Code을 사용해 유효한지 검증을 더 추가해 액세스 토큰을 발급 받는 방식입니다.

Authorization Code Grant Type
230927-141221

1. 유저가 한 서비스에 네이버로 로그인하겠다고 요청한다.
2. 서비스는 네이버 로그인 페이지으로 연결시켜준다.
3. 유저가 로그인한다.
4. 로그인하면 `Authorization Server``Authorization Code`를 전달한다.
5. 서비스는 코드를 받고, `Authorization Server`에 코드를 전달하며 액세스 토큰 발급을 요청한다.
6. `Authorization Server`가 코드를 확인하고 액세스 토큰을 건네준다.
7. 서비스는 액세스 토큰을 가지고 `Resource Server`에 정보를 요청한다.
8. `Resource Server`는 토큰을 확인하고 정보를 전달한다.

Oauth2의 또다른 대표적인 방식 중 하나로 Refresh Token Grant Type이 있습니다.
액세스 토큰은 유효기간을 짧게 설정한다는 특징이 있기 때문에 리프레시 토큰을 같이 발급해주어 로그인을 길게 유지하는 방법도 사용합니다.

액세스 토큰과 리프레시 토큰을 발급받아 로그인을 유지하는 방법은 이전 포스팅에서 확인하실 수 있습니다.
프로젝트와 섞어 말하는 토큰와 JWT

Reference Doc

OAuth, OAuth2 개념과 동작 방식 정리
OAuth


김다은 이모지
Daeun Kim
Junior Frontend Engineer