본문 바로가기
카테고리 없음

[OAuth 2.0] OAuth 2.0

by hbIncoding 2024. 10. 2.

1. OAuth 2.0 (Open Authorization)

  • OAuth 2.0은 인터넷 사용자들이 제3자 애플리케이션에 자신의 자격 증명을 노출하지 않고, 서비스에 대한 접근 권한을 안전하게 부여할 수 있는 인증 및 권한 부여 프레임워크입니다. 주로 소셜 로그인, API 사용 권한 위임 등에서 사용됩니다.
  • OAuth 방석 : 로그인 시 외부 소셜 계정을 기반으로 간편하게 인증하는 인증 서비스가 많은데, 이렇게 Third-Party 프로그램(우리가 개발하는 웹)이 Client를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임받는 방식

2. 주요 개념

  • Resource Owner (자원 소유자) : 사용자로, 서비스에 대한 접근 권한을 가지고 있는 주체
    • 구글 계정에 로그인한 사용자
  • Client (클라이언트) : 자원 소유자의 권한을 빌려 서비스를 사용하려는 애플리케이션
    • 구글 계정을 통해 로그인하려는 어플리케이션
  • Authorization Server(인증 서버) : 클라이언트가 자원 소유자에게 권한을 부여받을 수 있도록 인증을 담당하는 서버
    • 구글의 인증 서버
  • Resource Server (자원 서버) : 클라이언트가 자원 소유자의 권한을 가지고 접근할 자원을 관리하는 서버
    • 구글의 API 서버

3. 동작 방식

동작 과정 시퀀스 다이어 그램

 

  1. 권한 요청 (Authorization Request) : 클라이언트가 자원 소유자에게 권한을 부여해달라고 요청. 사용자는 인증 서버를 통해 로그인하고 권한을 부여한다.
  2. 권한 부여 (Authorization Grant) : 자원 소유자가 클라이언트에 대해 권한을 부여하면, 인증 서버는 클라이언트에게 Authorzation Code(권한 부여 코드)를 발급
  3. Access Token 발급 (Token Request) : 클라이언트는 이 권한 부여 코드를 인증 서버에 제출하여 Access Token(접근 토큰)을 발급받는다. 이 토큰은 클라이언트가 자원 서버에 접근할 때 사용
  4. 자원 접근(Access Resource) : 클라리언트는 자원 서버에 Access Token을 제출하여 자원에 접근. 자원 서버는 토큰을 검증하고 자원을 제공한다.

4. 권한 부여 방식 (Grant Types)

  1. Authorization Code Grant : 가장 일반적으로 사용되는 방식. 클라이언트가 직접 자격 증명 정보를 다루지 않으며, 보안성이 높다.
  2. Implict Grant : 브라우저 기반 클라이언트에서 사용되며, Access Token을 직접 발급반든다. 보안성이 낮아 주로 사용되지 않는다.
  3. Resource Owner Password Credentials Grant : 사용자 이름과 비밀번호를 직접 입력하는 방식. 사용자가 클라이언트 애플리케이션을 신뢰하는 경우에만 사용
  4. Client Credentials Grant : 서버 간 통신에서 주로 사용되며, 클라리언트가 스스로 인증하여 자원에 접근할 수 있다.

5. 장점

  • 보안성 : 자격 증명을 직접 다루지 않고, Access Token을 사용하므로 사용자 정보 유출 위험이 적다.
  • 범용성 : 다양한 서비스와 애플리케이션에서 통합적으로 사용 가능
  • 확장성 : 소셜 로그인, API 접근 권한 등 다양한 방식으로 확장 가능

 

 

6. 참조

1. OAuth 2.0 : https://velog.io/@choidongkuen/OAuth02-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C