개념

OAuth은 사용자 계정의 로그인이나 비밀번호 없이도 애플리케이션이 사진, 캘린더 또는 소셜 미디어 게시물과 같은 최종 사용자의 보호된 리소스에 액세스할 수 있는 권한을 부여하는 개방형 표준 인증 프레임워크이다.

사용 이점

  • 개발자 입장에서는 로그인 및 개인정보 관리에 대한 책임을 위임하여 서비스에만 집중
  • 사용자 입장에서는 추가적인 계정을 만드는 과정을 생략하여 우리 서비스에 손쉽게 가입

구성요소

CAUTION

OAuth2 동작 방식에서의 구성 요소를 뜻하는 것이며,
우리의 3-tier 레이어에서 서버와 클라이언트와 헷갈리지 않게 주의하자.

클라이언트 (client)

OAuth 2.0을 사용하여 리소스에 접근하려는 third-party 애플리케이션이나 서비스입니다.

리소스 소유자 (Resource Owner)

OAuth 2.0 프로토콜을 사용하여 보호되는 리소스에 대한 액세스 권한을 부여하는 사용자(엔티티)입니다.

클라이언트를 인증(Authorize)하는 역할을 수행합니다.

권한 서버 (Authorization Server)

권한 서버는 클라이언트가 리소스 소유자의 권한을 얻을 수 있도록 도와주는 서버입니다. 권한 서버는 사용자 인증, 권한 부여 및 토큰 발급을 관리합니다.

리소스 서버 (Resource Server)

리소스 서버는 보호되는 리소스를 호스팅하는 서버로, 액세스를 허용하거나 거부합니다.
이 서버는 OAuth 2.0 토큰을 사용하여 클라이언트에게 리소스에 액세스할 권한을 부여하고 실제 데이터를 제공합니다.

주요 용어

액세스 토큰(Access Token)

클라이언트가 리소스 서버의 리소스에 접근하기 위한 권한을 부여받는 토큰입니다.
액세스 토큰은 권한 서버로부터 발급되며, 일반적으로 제한된 유효 기간을 가지고 있습니다.

리프레시 토큰(Refresh Token)

리프레시 토큰은 액세스 토큰의 유효 기간이 만료된 후 새로운 액세스 토큰을 받기 위한 토큰입니다. 이를 통해 사용자는 다시 로그인할 필요 없이 토큰 유효 시간 갱신만으로 계속 애플리케이션을 사용할 수 있습니다.

범위(Scope)

범위는 클라이언트가 리소스에 대한 어떤 작업을 수행할 수 있는지를 정의하는 문자열입니다. 범위는 권한 서버에 의해 정의되며, 클라이언트는 특정 범위의 액세스 권한을 요청할 수 있습니다.

인증 코드(Authorization Code)

인증 코드는 클라이언트가 액세스 토큰을 얻기 위한 중간 단계로 사용되는 코드입니다. 인증 코드 부여(Authorization Code Grant) 방식을 통해 권한 서버로부터 발급되며, 이를 사용하여 액세스 토큰과 리프레시 토큰을 얻을 수 있습니다.

인증 방식

자세한 내용은 공식 문서를 참고

인증 코드 부여(Authorization Code Grant)

권한 부여 승인을 위해 자체 생성한 인증 코드를 전달하는 방식으로 가장 많이 사용되는 기본 방식입니다. 가장 보안이 높은 방식으로 액세스 토큰이 직접 클라이언트에게 노출되지 않습니다. 웹 애플리케이션 또는 서버 애플리케이션과 같이 신뢰할 수 있는 환경에서 사용됩니다.


https://guide.ncloud-docs.com/docs/b2bpls-oauth2

  1. 인증 코드 요청
    • 클라이언트가 사전에 권한 서버로부터 발급한 클라이언트 ID, redirect_uri 정보와 함께 response_type을 code로 지정하여 요청합니다.
  2. 로그인
    • 권한 서버에서 로그인 페이지를 제공하고 리소스 소유자가 로그인 합니다.
  3. 인증 코드 전달
    • 로그인에 성공하면 권한 서버는 전달받은 redirect_uri로 인증 코드를 전달합니다.
  4. 엑세스 토큰 발급
    • 클라이언트가 권한 부여 승인 코드를 통해 엑세스 토큰 (및 리프레시 토큰)을 발급받습니다.
    • 이때 사전에 권한 서버로부터 발급한 클라이언트 ID와 클라이언트 시크릿 (Client Secret) 정보가 필요합니다.

나머지 방식은 해당 글에서 참고

출처 및 참고자료

https://guide.ncloud-docs.com/docs/b2bpls-oauth2
https://www.ibm.com/kr-ko/think/topics/oauth
https://wildeveloperetrain.tistory.com/247