본문 바로가기

Spring boot

Bank App 만들기 ( deployment ) - OAuth 2.0 이란 ( Open Authorization )

OAuth ( Open Authorization ) 2.0 이란 ?

사용자가 자신의 계정 정보를 직접 공유하지 않아도 서드 파티 애플리케이션들이 제한된 접근을 할 수 있게 해준다.

카카오 로그인은 카카오계정으로 다양한 서비스에 로그인할 수 있도록 하는 소셜 로그인 서비스이다. 카카오싱크는 서비스 간편가입 등 카카오 로그인에 더 다양한 확장 기능을 제공하는 비즈니스 설루션이다. 카카오 로그인과 카카오싱크가 제공하는 핵심 기능은 다음과 같다.

 

https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

구분  설명
인증(Authentication) ID와 비밀번호로 사용자 신원을 확인, 각 서비스에 사용자가 카카오계정으로 로그인할 수 있는 기능 지원서비스에서 각 사용자를 식별할 수 있는 고유한 회원번호 제공참고: https://developers.kakao.com/docs/latest/ko/kakaologin/common#oidc 지원, 로그인 세션 대신 사용 가능한 ID 토큰 제공 가능
인가(Authorization) 사용자 개인정보와 같은 자원(Resource)에 대한 접근 권한 획득https://developers.kakao.com/docs/latest/ko/kakaologin/common#authorization를 바탕으로 사용자 정보나 기능에 대한 접근 권한을 https://developers.kakao.com/docs/latest/ko/kakaologin/common#token 형태로 서비스에 부여

 

   The authorization code grant type is used to obtain both access
   tokens and refresh tokens and is optimized for confidential clients.
   Since this is a redirection-based flow, the client must be capable of
   interacting with the resource owner's user-agent (typically a web
   browser) and capable of receiving incoming requests (via redirection)
   from the authorization server.

     +----------+
     | Resource |
     |   Owner  |
     |          |
     +----------+
          ^
          |
         (B)
     +----|-----+          Client Identifier      +---------------+
     |         -+----(A)-- & Redirection URI ---->|               |
     |  User-   |                                 | Authorization |
     |  Agent  -+----(B)-- User authenticates --->|     Server    |
     |          |                                 |               |
     |         -+----(C)-- Authorization Code ---<|               |
     +-|----|---+                                 +---------------+
       |    |                                         ^      v
      (A)  (C)                                        |      |
       |    |                                         |      |
       ^    v                                         |      |
     +---------+                                      |      |
     |         |>---(D)-- Authorization Code ---------'      |
     |  Client |          & Redirection URI                  |
     |         |                                             |
     |         |<---(E)----- Access Token -------------------'
     +---------+       (w/ Optional Refresh Token)

   Note: The lines illustrating steps (A), (B), and (C) are broken into
   two parts as they pass through the user-agent.

 

 

 

OAuth 2.0은 인증을 위한 프레임워크로, 아래와 같이 네 가지 주요 인증 방식을 제공한다

1. Authorization Code Grant (인증 코드 부여)

  • 개념
    • 이 방식은 세 번째 자(Third-party) 애플리케이션에 액세스 토큰을 직접 전달하지 않는다.
    • 대신 인증 코드가 클라이언트로 전달되며, 이 코드를 사용하여 액세스 토큰을 얻을 수 있다.
  • 사용처
    • 웹 애플리케이션이나 모바일 애플리케이션과 같이 클라이언트 비밀(client secret)을 안전하게 보관할 수 있는 환경에서 사용된다.
  • 흐름
    1. 유저가 클라이언트를 통해 리소스 소유자로 로그인한다.
    2. 인증 서버는 인증 코드를 클라이언트에게 반환한다.
    3. 클라이언트는 인증 코드와 클라이언트 비밀을 인증 서버에게 전송하여 액세스 토큰을 얻는다.

2. Implicit Grant (암시적 부여)

  • 개념
    • 이 방식은 클라이언트에게 인증 코드를 제공하는 대신 바로 액세스 토큰을 전달한다.
  • 사용처
    • 주로 JavaScript를 사용한 클라이언트 사이드 애플리케이션에서 사용된다.
    • 이 방식은 클라이언트 비밀을 저장할 수 없는 상황에서 사용된다.
  • 흐름
    1. 유저가 클라이언트를 통해 리소스 소유자로 로그인한다.
    2. 인증 서버는 액세스 토큰을 바로 클라이언트에게 반환한다.

3. Resource Owner Password Credentials Grant (리소스 소유자 암호 자격증명 부여)

  • 개념:
    • 이 방식은 사용자의 아이디와 비밀번호를 직접 요구한다.
    • 사용자의 자격 증명을 사용하여 액세스 토큰을 얻을 수 있다.
  • 사용처:
    • 이 방식은 클라이언트가 사용자의 자격증명을 안전하게 처리할 수 있을 때, 특히 사용자와 클라이언트 사이에 높은 신뢰가 있을 때 사용된다.
  • 흐름:
    1. 유저가 아이디와 비밀번호를 클라이언트에게 제공한다.
    2. 클라이언트는 이 자격 증명을 사용하여 인증 서버에 액세스 토큰을 요청한다.

4. Client Credentials Grant (클라이언트 자격증명 부여)

  • 개념:
    • 이 방식은 클라이언트 자격증명을 사용하여 액세스 토큰을 얻는 방법이다.
  • 사용처:
    • 이 방식은 클라이언트 자체의 리소스에 접근할 때 주로 사용된다.
  • 흐름:
    1. 클라이언트는 자신의 ID와 비밀번호를 사용하여 인증 서버에 액세스 토큰을 요청한다.

각 인증 방식은 상황과 요구 사항에 따라 다르게 적용될 수 있으며, 각 방식의 보안 리스크와 트레이드 오프를 고려하여 적절한 방식을 선택해야 한다.

728x90

'Spring boot' 카테고리의 다른 글

OOP 회원과 주문 관리 설계  (3) 2024.10.01
Server To Server  (0) 2024.08.16