ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth2.0 패스워드 그랜트와 클라이언트 자격 증명 그랜트
    Security 2021. 9. 8. 10:49

    이전 장에서는 OAuth2에 관련된 전반적인 개요를 알아보았습니다.

    이번 장부터는 OAuth2의 4가지 그랜트 타입의 상세한 메커니즘을 하나씩 알아보고 이를 직접 구현해보도록 하겠습니다.

     

    패스워드 그랜트 (Password Credentials Grant) 란?

    지난 장 내용을 다시 정리해 보면, 사용자가 이용하는 모바일 웹&앱 및 서비스 애플리케이션이 모두 하나의 기업 혹은 기관에서 소유하고 있을 경우에 이용되는 방법이라고 하였습니다.

    사용자는 모바일 웹(혹은 앱)에서 ID와 비밀번호를 이용하여 인증서버에 1회 인증을 거쳐 Access Token을 발급받습니다.

    이후 이 Access Token을 이용하여 여러 서비스 애플리케이션을 이용할 수 있습니다.

     

    이제 단계별로 예를 들어 보겠습니다.

     

    A사가 있습니다. 이 기업은 사용자들을 대상으로 웹서비스를 제공합니다.

     

    이를 위해 자원을 관리하는 리소스 서버와 사용자가 직접적으로 사용하는 클라이언트 서비스가 있습니다.

    또한 인증을 관리하기 위한 인증서버리소스 소유자가 존재합니다.

     

    1. 인증서버에 리소스 등록

    첫 번째로 인증서버에 보호되어야 할 리소스 서버를 등록해야 합니다.

    리소스 서버는 고유 ID(App ID)Secret을 가지고 있으며 이를 이용하여 인증 서버에 등록합니다.

     

    (사용자는  이미 A사에 이미 가입이 되어 있어, 사용자 계정 정보를 인증서버가 가지고 있는 것으로 가정합니다.)

     

    2. Access Token 획득

    1. Access Token을 획득하기 위해서 사용자의 로그인을 통해 계정 정보(로그인 ID와 비밀번호)를 입력받습니다.
    2. 이와 함께 클라이언트는 사용자의 계정 정보와 보유하고 있는 리소스 서버의 App ID와 Secret, 그랜트 타입, 범위 값을 이용하여 Access Token 발급 요청을 합니다.
    3. 요청받은 인증 서버는 클라이언트가 보내온 값이 유효한지 검증을 한 뒤 일치하다면 Access Token을 발급합니다.

     

     

    3. 자원 정보 요청

    이제 클라이언트는 Access Token의 유효기간 동안 리소스 서버에 접근이 가능한 환경이 구성되었습니다.

     

    1. 사용자의 요청을 받아 클라이언트는 Header 정보에 Access Token을 담아서 리소스 서버에 정보를 요청합니다.
    2. 리소스 서버는 해당 Access Token이 유효 한지 인증 서버로 검증 요청을 하며, 유효한 토큰일 경우 유효한 값을 응답하며, 유효하지 않을 경우 오류 응답을 합니다.
    3. 인증 서버의 결과에 따라 리소스 서버는 클라이언트에게 응답을 반환합니다.

     

     

    클라이언트 자격 증명 그랜트 (Client Credentials Grant) 란?

    다음으로는 클라이언트 자격 증명 그랜트의 동작 방식을 상세히 알아보겠습니다.

     

    지난 장 내용을 다시 정리해 보면, 패스워드 그랜트와 비슷하지만 사용자의 개입이 없기에 사용자의 ID와 비밀번호 없이 Access Token 획득이 가능하다고 하였습니다. 

    하여 같은 자원을 소유한 한 회사의 외부와 단절된 내부망의 여러 서비스들끼리의 인증 작업에 적합한 방법입니다.

     

    단계별로 예를 들어 보겠습니다.

     

    A사가 있습니다. 이 기업은 일정한 규칙의 스케줄대로 동작하는 배치 서비스가 있습니다.

    또한, 배치 서비스에게  자원을 제공하는 리소스 서버인증을 관리하기 위한 인증서버 리소스 소유자가 존재합니다.

     

    상세 절차를 알아보겠습니다. (패스워드 그랜트와 중복되는 설명은 최대한 생략하겠습니다.)

     

    1. 인증서버에 리소스 등록

    패스워드 그랜트와 마찬가지로 인증서버에 보호되어야 할 리소스 서버를 등록해야 합니다.

    차이점은 사용자의 개입이 없다는 것입니다.

     

    2. Access Token 획득

    1. Access Token을 획득하기 위해서 배치 서비스는 보유하고 있는 리소스 서버의 App ID와 Secret, 그랜트 타입, 범위 값을 이용하여 Access Token 발급 요청을 합니다. (사용자로부터의 요청이 아니기에 사용자 ID와 비밀번호는 필요가 없습니다.)
    2. 요청받은 인증 서버는 클라이언트가 보내온 값이 유효한지 검증을 한 뒤 일치하다면 Access Token을 발급합니다.

     

    3. 자원 정보 요청

    이제 클라이언트는 Access Token의 유효기간 동안 리소스 서버에 접근이 가능합니다.

     

    마무리

    이번 포스팅에서는 패스워드 그랜트 (Password Credentials Grant)과 클라이언트 자격 증명 그랜트 (Client Credentials Grant)의 상세한 동작 메커니즘을 알아보았습니다. 이 2 유형의 그랜트는 동작 방식이나 구현 방식이 거의 비슷하기에 함께 이해하시고 구현하는 것을 추천드립니다.

    다음 포스팅에서는 드디어 지금까지의 이론을 바탕으로 패스워드 그랜트 (Password Credentials Grant)과 클라이언트 자격 증명 그랜트 (Client Credentials Grant)의 OAuth2 서버와 리소스 서비스를 구현해 보겠습니다.

    댓글

Designed by Tistory.