Oauth2

1. Oauth2(Open Authorization2)

  • 특정 자원에 접근(Authorization)할 수 있는 권한을 개방(Open)

Api서버에서 사용자 대신 제3자 앱(카카오톡, 네이버등)에 접근할 수 있도록 권한을 위임하는 개방형 표준 프로토콜.

사용자는 제3자 앱에서 제공하는 인증페이지에서 인증을 진행하고, 인가 권한은 백엔드 서버로 위임하여, 제3자 앱의 비밀번호를 백엔드에 전달하지 않고도, 특정 서비스(구글, 카카오톡)의 정보를 백엔드에서 이용할 수 있게 해준다.

사용자는 자신의 앱의 비밀번호가 노출되지 않기 때문에, 클라이언트 서버가 해킹당하더라도 안전하며, 매번 새로운 서비스에 새로 가입할 필요 없이, 기존 계정을 통해 간편하게 로그인을 할 수 있다.

2. 구성 요소

  • Resource Owner: 로그인하려는 사용자

  • Client: 사용자의 권한을 위임받아 리소스에 접근하려는 애플리케이션(RestAPI)

  • Resource Server: 사용자의 정보(리소스)를 가지고 있는 서버(카카오 DB 서버)

  • Authorization Server: 클라이언트에게 접근 권한을 부여하는 서버(카카오 API 서버)

3. 프로세스

  1. 권한 요청

    1. 클라이언트(REST API)가 리소스 소유자에게 리소스 접근 권한을 요청

  2. 사용자 인증 및 동의

    1. 리소스 소유자는 인증 서버에서 로그인하고, 클라이언트가 요청하는 권한을 동의

  3. 인가 코드 발급

    1. 동의가 완료되면 인증 서버는 클라이언트에게 인가 코드(Authorization Code)를 전달

  4. 액세스 토큰 요청

    1. 클라이언트(REST API)는 인가 코드를 이용해 인증 서버에 액세스 토큰(Access Token) 발급을 요청해요.

  5. 액세스 토큰 발급

    1. 인증 서버는 클라이언트가 유효한지 확인 후 액세스 토큰을 발급

  6. 리소스 접근

    1. 클라이언트는 이 액세스 토큰을 가지고 리소스 서버에 접근해 사용자의 정보를 가져온다

  7. 회원정보 조회

    1. 리소스 서버에서 가져온 회원정보를 바탕으로 클라이언트 서버에 리소스 소유자의 정보를 조회

  8. 회원가입

    1. 회원정보가 존재하지 않는다면 회원가입처리를 하며, 회원정보가 존재하면 로그인처리한다

  9. JWT토큰 발급

    1. 로그인/ 회원가입 시 JWT토큰을 발급하여 리소스 소유자에게 전달한다.

4. Spring Boot 라이브러리

  • 인증서버와 통신시 통신 방법에 따라 web-flux가 필요할 수 있음.

Last updated