OAuth 2.0 정리

업데이트:

OAuth 2.0

인증을 위한 개방형 표준 프로토콜로 Third-Party 프로그램에게 리소스 소유자를 대신하여 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식

Resource Owner

  • 리소스 소유자로 본인의 정보에 접근할 수 있는 자격을 승인하는 주체
  • (구글, 네이버, 페이스북..) 사용자로 로그인이 되면 클라이언트에게 권한을 준다.

Resource Server

  • 사용자의 자원을 호스팅하는 서버
  • 페이스북 피드, 사진첩 등등 데이터를 제공하는 서버

Authorization Server

  • 사용자(Resource Owner)의 동의를 받아서 권한을 부여하는 서버 서버로 접근 자격을 확인하고 Token을 발급한다.
  • Resource Server와 보통 같이 구현된다.

Client

  • Resource Server에서 제공하는 자원을 사용하는 애플리케이션
  • 실제로 고객이 사용하는 곳으로 MD-Cloud

애플리케이션에 비밀번호를 제공하지 않으면서 실제 서비스를 이용할 수 있도록 도움을 준다. 하지만 API 호출 요청에 대해 전달 받은 Access Token의 유효성 및 권한을 인가 서버에 계속적으로 요청하여 병목 현상등이 발생해서버의 부하로 이어질 수 있다.

이를 해결하기 위해 JWT 기반 인증 방식이 사용된다. JWT는 토큰의 한 형식이고, OAuth는 하나의 Framework다.

JWT

  • 토큰의 한 형식으로 Access 토큰과 Refresh Token을 발급 받는다.
  • Access 토큰의 유효기간을 길게하면 탈취당할 위험이 있어 짧게 유지하고 만료된 경우 Refresh Token을 확인한 후 다시 Access Token을 발급한다.
  • Refresh Token은 클라이언트가 가지고 있고 서버DB에 저장되어 있어 비교 후 발급을 진행한다.

Refresh Token도 탈취를 당할 수 있어 RTR 기법이 사용된다. 간단히 말하면 한번쓰면 다음 refresh token을 발급한다.

한번 이상의 사용이 감지되면 탈취된 것으로 취급하고 모든 토큰을 폐기한다. Refresh Token 사용의 주된 이유는 Access Token의 수명을 줄이기 위함이다.

Spring Security Oauth2

ClientRegistration

OAuth 2.0에서 등록한 클라이언트를 의미하는 클래스로 클라이언트 Id, 클라이언트 secret, 권한부여 타입, 리다이렉트 URI, scope, 인가 URI, 토큰 URI등의 상세 정보를 가지고 있다.

ClientRegistrationRepository OAuth 2.0의 ClientRegistration 저장소 역활을 한다.

클라이언트 등록 정보는 궁극적으로 인가 서버가 저장하고 관리한다. 이 레포지토리는 인가 서버에 일차적으로 저장된 클라이언트 등록 정보의 일부를 검색하는 기능을 제공한다.

CommonOAuth2Provider

유명한 provider 구글, 깃허브, 페이스북 등 전용 디폴트 클라이언트 프로퍼티가 미리 정의돼 있다.

OAuth2AuthorizedClient

인가받은 클라이언트를 의미하는 클래스로 최종 사용자(리소스 소유자)가 클라이언트에게 보호 중인 리소스에 접근할 수 있는 권한을 부여하면, 클라이언트를 인가된 클라이언트로 간주한다.

OAuth2AccessToken과 ClientRegistration과 리소스 소유자, 즉 권한을 부여한 최종 사용자 Principal과 함께 묶어준다.

태그:

카테고리:

업데이트:

댓글남기기