공부하다죽어라
article thumbnail
Published 2022. 12. 24. 22:04
Spring OAuth 2.0 구현 [1] 개발/Security
OAuth 2.0 (Open Authorization 2.0, OAuth2), 인증을 위한 개방형 표준 프로토콜

OAuth 프로토콜은 트위터의 웹 개발자들이 오픈 API 방식의 보안을 생각해 만든 표준 사용자 인증 프로토콜이다.

 

큰 특징은 다음과 같다.

  1. 인증 ( Authentication, 이 사용자가 누구인가 ? )
  2. 권한 ( Authorization, 접근한 사용자가 무엇을 할 수 있는가 ? )

오픈 API로 접근하는 사용자가 인증받은 사용자가 맞는지, 그리고 그 사용자는 어떠한 권한이 있는지를 확인할 수 있도록 하는 인증 프로토콜이 OAuth 2.0 이다.


왜 OAuth 2.0 인가?

 OAuth 탄생 전 많은 서비스 기업은 인증 방식에 있어서 단순하게 아이디와 패스워드를 사용했는데 이는 보안상 매우 취약한 방식이었다. 그래서 이러한 인증 체계를 하나로 통합하고 표준화 한 것이 OAuth 프로토콜이고 2010년 IETF에서 OAuth 1.0 공식 표준안이 RFC 5849로 발탁되었다. 

 현재는 애플리케이션 개발자의 편리함과 단순성을 좀 더 고려하여 OAuth 2.0 이라는 새로운 스펙이 개발되었고 이는 현재까지도 널리 쓰이는 방식이다.

 

OAuth 2.0 용어 정의
USER : 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인
CONSUMER : Open API를 이용하여 개발된 OAuth를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 애플리케이션서비스
SERVICE PROVIDER : OAuth를 통해 접근을 지원하는 웹 애플리케이션(Open API를 제공하는 서비스)소비자
CONSUMER SECRET : 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키요청
REQUEST TOKEN : 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있으며 후에 접근 토큰으로 변환된다.
ACCESS TOKEN : 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해서 보호된 자원에 접근하기 위한 키를 포함한 값.

OAuth 2.0 Roles

OAuth 를 구현함에 각 리소스들의 Role은 다음과 같다.

 

출처 : 오픈뱅킹 금융결제원

  • Resource Owner : 리소스 소유자 또는 사용자이며 보호된 Resource Server에 접근할 수 있는 자격을 부여해주는 주체. OAuth 프로토콜에서 클라이언트를 인증(Authorize)하는 역할을 수행한다. 이후 인증이 완료되면 권한(Grant) 부여
  • Client : 보호된 자원을 사용하기 위해 접근을 요청하는 애플리케이션
  • Resource Server : 사용자의 보호된 자원을 호스팅하는 서버 
  • Authorization Server : 인증과 인가를 수행하는 서버. 즉, 클라이언트의 접근 자격을 확인하고 Access Token을 발급해 권한을 부여하는 역할을 수행

OAuth 2.0 Access Token 발급의 4가지 방식

  1. 권한 부여 승인 코드 방식 (Authorization Code Grant)

    - 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식으로 많이쓰이며 기본이 되는 방식

 

  2. 암묵적 승인 방식 (Implicit Grant)

    - 자격 증명을 안전하게 저장하기 힘든 클라이언트에게 최적화된 방식 

    - 보통 승인코드 없이 바로 Access Token이 발급되며 만료기간이 짧다.

 

  3. 자원 소유자 자격증명 승인 방식 (Resource Owner Password Credentials Grant)

    - Username, Password로 Access Token을 발급

    - 클라이언트가 타사의 외부 프로그램일 경우엔 이 방식을 사용하지 않는다. 

    - Resource Server, Client, Authorization Server가 모두 같은 시스템에 속해있을 때 사용되어야 하는 방식 

 

  4. 클라이언트 자격증명 승인 방식 (Client Credentials Grant)

    - 클라이언트의 자격 증명만으로 Access Token을 획득한다.

    - 자격 증명을 안전하게 보관할 수 있는 클라이언트에서만 사용되어야 하며, Refresh Token은 사용할 수 없다.

profile

공부하다죽어라

@슥혁

감사합니다 👍🏻