OAuth는 Open Authorization의 약자로, 웹 및 모바일 애플리케이션에서 사용자 인증 및 권한 부여를 위한 개방형 표준 프로토콜이다. OAuth는 다른 웹 서비스나 애플리케이션에서 사용자의 데이터를 안전하게 엑세스하고 사용할 수 있도록 허용하고 사용자가 자신의 데이털르 제 3자와 공유할 때의 보안과 편의성을 제공한다.
- 사용자 인증
- 사용자의 권한 부여
OAuth를 사용하면 자신의 계정 정보를 제공하여 다른 서비스에서 로그인하지 않고 해당 서비스에 접근할 수 있다.
OAuth를 사용하면 사용자는 다른 서비스에 대해 자신의 데이터 엑세스 권한을 부여하건 취소할 수 있다.
즉, 깃헙이 되었든 구글 등의 계정을 통해서 우리는 로그인을 대신 진행할 수 있다는 것이다.
대표적으로 우리는 총 크게 아래와 같이 3가지 구성요소로 본다.
- 리소스 소유자(Resource Owner)
- 클라이언트(Client)
- 서비스 제공자(Service Provider)
리소스 소유자는 사용자라고 보면 되고 클라이언트는 OAuth를 통해 사용자의 데이터에 엑세스하려는 웹 애플리케이션, 서비스 제공자는 사용자의 데이터를 보유하고 있는 서비스 또는 플랫폼(예를 들어, 깃헙 또는 구글)이다.
흐름은 대충 아래와 같다.
- 클라이언트가 리소스 소유자에게 인증을 요청
- 리소스 소유자가 인증을 하기 위해 서비스 제공자에게 가서 인증 코드를 받는다.
- 서비스 제공자는 인증 코드를 리소스 소유자에게 주는 것이 아니라 클라이언트에게 제공한다.
- 클라이언트는 이렇게 제공 받은 인증 코드를 통해 인증 통과를 한다.
위의 포스팅에서 정말 자세하게 설명되어 있어 공유한다.
해당 포스팅에는 아래와 같은 시퀸스 다이어그램이 있다.
위의 시퀸스 다이어그램 글로 풀어보면 아래와 같다.
★ Refesh토큰을 생성하는 이유는 이전의 JWT토큰 포스팅에서 말했듯이 유효 기간이 존재하기 때문에 유효 기간이 지나면 토큰은 버려진다. 이렇게 토큰이 버려진다면 우리는 귀찮게 또 로그인을 해야할 것이다. 이를 방지하기 위해 JWT토큰을 만들 때 Refesh토큰을 만들어 둬서 만약 JWT토큰이 만료 되었을 때 쿠키에서 Refesh토큰을 꺼내서 JWT토큰을 새로 만든다.