OAuth 카카오 로그인

이민우·2023년 10월 22일
0

오늘은 OAuth에 대해 적어보도록 하겠다.

해당 게시글에선 OAuth를 구현하기 위해서 Spring 의 RestTemplate 을 사용 하였다.
RestTemplate 에 대해선 다른 게시글에서 자세하게 알아보도록 하겠다.

OAuth

  • OAuth
    사용자가 웹 사이트에 접근 할 때 해당 웹 사이트에 비밀번호와 같은 정보를 제공하지 않고 서드파티 애플리케이션(카카오, 구글 등) 의 연결을 통해 인증과 권한을 부여 받을 수 있는 프로토콜이다.

  • 서드파티 애플리케이션
    다른 조직 또는 개인에 의해 개발 및 운영되는 소프트웨어 애플리케이션을 뜻한다.

  • 프로토콜
    인터넷에서 컴퓨터와 컴퓨터 간에 데이터를 주고받을 때 사용되는 통신 규약을 의미한다.

즉 OAuth 는 웹 사이트를 사용할 때 아이디와 비밀번호와 같은 정보를 해당 웹 사이트에 제공하지 않고 카카오, 구글 등과 같은 이미 내 정보를 가지고 있는 조직에서 인증을 대신 하는 것이다.

사용자는 여러 웹 사이트에 정보를 입력하는 번거로움을 없애고 웹 사이트는 사용자의 민감 정보를 관리하는 부담을 줄일 수 있다.

앱(서비스) 등록

OAuth 를 사용하기 위해선 OAuth 를 제공하는 조직에 앱을 등록 하여야 한다 여기서 앱이란 내가 제작한 웹 사이트 를 의미한다.

해당 게시글에선 카카오에 앱을 등록 후 OAuth 를 구현하도록 하겠다.

앱을 등록하는 방법은 다음과 같다.

https://developers.kakao.com/

위의 링크는 OAuth 와 같은 카카오 에서 제공하는 서비스와 기능을 활용할 수 있는 곳이다.

로그인 후 내 애플리케이션 을 통해 이동 하면 위와 같은 애플리케이션 추가 를 할 수 있다.

성공 적으로 애플리케이션을 추가하면

위와 같은 키를 발급 받을 수 있다.

사용할 키는 REST API 키로 RESTful API 를 사용하여 웹 서비스나 애플리케이션을 상호 작용하는데 사용되는 보안 인증 정보 이다.

쉽게 말해 해당 키로 카카오가 제공하는 기능을 사용 할 수있다.

위의 이미지 처럼 OAuth 를 통해 제공 받을 사용자의 데이터를 지정할 수 있다.

위의 이미지는 중요한 작업으로 카카오 API와 상호 작용하는 데 필요하다. 예로는 인증 이 완료되면 해당 URL 로 인증 결과를 수신하고 인증 성공 시 액세스 토큰, 인증 코드 등을 반환한다.

OAuth 용어

다음으로 OAuth 서비스 흐름을 이해하는 데 도움이되는 역할과 OAuth 인증 방식에 대해 알아보자.

역할

  • Resource Server
    • Rsource Oener 의 정보를 가지고 있는 OAuth 기반의 서비스를 제공하는 서버
    • 카카오, 구글 등 서드파티 애플리케이션을 말한다.
  • Rsource Oener
    • Resource Server 의 계정을 보유하고 있는 사용자
    • 웹 사이트에 접근하려는 사용자 이다.
  • Client
    • OAuth 를 통해 제공하는 서비스를 사용하고자 하는 서버
    • 사용자가 접근하려는 웹 사이트 이다.
  • Authorization Server
    • Resource Server 에 대한 인증을 담당하는 서버
    • Resource Server 의 Owner 인지 판단하고 인증을 해주는 역할 이다.

인증 방식

OAuth 는 다양한 인증을 위한 승인 방식이 있지만 해당 게시글에선 일반적으로 사용되는 방식을 사용 한다.

  • Authorization Code
    • 클라이언트는 권한 부여 서버에서 권한 부여 코드를 요청하고 이를 엑세스 토큰으로 교환한다.
    • 사용자의 리소스에 액세스해야 하는 웹 서버 애플리케이션에서 사용된다.
  • JWT
    • JWT 를 사용하여 엑세스 토큰을 요청, 단일 로그인 SSO 시나리오에 사용된다.
  • Refresh Tocken
    • Refresh Tocken 을 사용하여 새로운 액세스 토큰을 요청, 사용자가 재인증 하지 않고 새로운 액세스 토큰을 얻기 위해 사용한다.

JWT 와 Refesh Tocken 인증 방식은 OAuth 의 다양한 인증 방식 중 나중에 사용해 보면 좋을 것 같은 것들을 추가 해 보았다.

OAuth 서비스 흐름

이제 OAuth 가 어떤식으로 동작하는지 살펴보도록 하자.

전체적인 흐름을 간단히 살펴 보자면 사용자가 웹 사이트 대신 서드파티 애플리케이션에 인증을 하고 인증에 성공하면 받은 인가 코드를 웹 사이트가 대신 받으며 인가 코드를 이용해 사용자의 데이터를 사용할 수 있는 권한을 얻을 수 있는 토큰을 발급 받고 해당 토큰을 이용해 사용자의 데이터를 불러온다.

우선 사용자가 웹 사이트를 통해서 카카오 로그인을 수행한다.
이 과정에서 웹 사이트는 카카오에서 제공하는 로그인 URL을 통해 사용자가 정보를 입력하도록 한다.

위의 이미지는 사용자가 버튼을 클릭시 이동시킬 카카오 URL 과 앞서 생성 했던 해당 웹 사이트가 등록된 앱인지 판단하는 키 값, 사용자가 성공적으로 인증 성공시 인증 코드를 받은 URL, 반환 받을 데이터의 형식 을 쿼리스트링 방식으로 나타낸 것이다.

해당 URL을 통해 사용자가 아이디와 페스워드를 입력 후 성공적으로 인증을 완료 하면 카카오에서 인가 코드를 웹 사이트로 반환 한다.

여기까지의 동작이 인증을 완료한 것이고 웹 사이트는 받은 인가 코드를 클라이언트 키와 리다이렉트 URL, grant_type 정보와 함께 사용자의 정보를 사용할 수 있게 해주는 토큰을 발급 받기위해 카카오 에 다시 요청을 보낸다.

위의 방식은 RestTemplate 을 사용해 카카오 서버에 토큰을 요청하는 방식이다.
토큰을 발급 받을 URL 을 지정하고 해당 URL에 보낼 HTTP 요청에 앞서 말한 키 값, 인가 코드 등의 데이터를 추가하고 POST 방식으로 요청을 보낸다.

여기서 grant_type 는 카카오에게 웹 사이트가 어떤 유형의 인가를 요청 했는지 나타내는 역할 이다.

위의 요청이 성공적으로 완료되면 카카오에서 토큰을 받을 수 있다.
여기까지가 웹 사이트가 사용자의 정보를 카카오에서 받을 수 있는 권한을 얻게 된 것이다.
추가적으로 여기 까지의 과정을 역할 설명에서 봤던 Authorization Server 와 상화작용을 한것이다.

웹 사이트는 발급 받은 토큰을 이용해 카카오에 사용자의 정보를 요청하고 카카오서버는 해당 토큰이 정상적인지 확인 후 웹 사이트에 사용자의 정보를 보내주게 된다.

토큰을 보내는 방식은 사용자의 정보를 요청할 URL 을 지정하고 토큰을 "Bearer " 을 추가한 값으로 보내 준다.

성공적으로 요청이 완료되면 웹 사이트는 사용자의 정보를 받을 수 있고 해당 정보를 이용해 사용자에게 토큰을 부여하는 등의 방식으로 서비스를 이용할 수 있게 해준다.

중요한점은 인가코드, 토큰, 사용자 정보를 얻는 카카오 URL 과 필요한 정보, 데이터가 다르기 때문에 카카오에서 제공하는 API에 맞춰 요청을 해야 정상적인 결과를 얻을 수 있다.

마지막으로 카카오, 구글, 네이버 등 각각 OAuth 앱을 등록하는 것과 요청을 보내는것에 차이가 있으니 확인 후 구현하도록 하자.

profile
개린이

0개의 댓글

관련 채용 정보