OAuth (OAuth 2.0)
OAuth는 인증을 중개해주는 메커니즘으로 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다. 즉, 이미 사용자 정보를 가지고 있는 웹 서비스(Naver, Kakao, Google 등)에서 사용자의 인증을 대신해주고, 접근 권한에 대한 토큰을 발급한 후, 이를 이용해 내 서버에서 인증이 가능해진다.
OAuth는 어디에서 사용함? (= 소셜 로그인)
- 특정 사이트에 회원가입을 하는 것이 아닌 이미 가입한 계정(카카오, 네이버, 구글 등)을 통해 빠르게 서비스에 가입하는 것을 말한다.
- 서비스를 구현하는 개발자도 신규 회원가입이나 회원 관리를 신경 쓰지 않아도 되기 때문에 사용자와 기업 모두 소셜 로그인을 선호하고 있는 추세이다.
- 검증되지 않은 App에서 OAuth를 사용하여 로그인한다면, 유저의 민감한 정보가 직접 App에 노출될 일이 없고 인증 권한에 대한 허가를 미리 유저에게 구해야 하기 때문에 보안적인 측면에서도 큰 이점이 있다.
OAuth의 장점
- 사용자는 손쉽게 가입할 수 있다
- 사용자의 정보를 해당 서비스에 직접적으로 노출하는 것이 아니기 때문에 직접 가입하는 것보다 안전하다
- 사용자는 원하는 정보에만 접근을 허락할 수 있어 보다 더 안전합니다.
- OAuth 설정 페이지에서는 Application에서 필요한 정보를 선택할 수 있습니다. 사용자는 이 중 원하는 정보만 선택적으로 제공할 수 있다.
OAuth 인증 방식의 종류와 흐름
Authorization Code Grant Type
- Authorization Code를 사용한 인증 단계가 추가로 있기 때문에 비교적 안전하다.
- 원한다면 토큰을 Application의 client에 노출시키지 않고 server에서만 관리하도록 만들 수 있기 때문에 소셜 로그인을 구현하는 방식의 선택지가 늘어나게 된다.
- 사용자가 새로운 서비스를 이용하다가 액세스 토큰이 만료되었을 때, 매번 이 과정을 거쳐서 액세스 토큰을 다시 발급받아야 한다면 사용자 편의성에 있어서는 좋지 않음
Refresh Token Grant Type
- 리프레시 토큰을 사용해서 액세스 토큰을 받아오는 인증 방식을 말한다.
- Authorization Server로 리프레시 토큰을 보내주면, Authorization Server는 리프레시 토큰을 검증한 다음 액세스 토큰을 다시 발급해준다.
- Application은 다시 발급 받은 액세스 토큰을 사용해서 Resource Server에서 사용자의 정보를 받아오게 된다.