ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OAuth 2.0
    Back-end 2022. 2. 23. 22:37

    OAuth 2.0의 개념과 작동방식에 대해 정리하였습니다.

     

     


    < OAuth 란? >

    OAuth는 인증을 위한 표준 프로토콜의 한 종류로 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜 중 한 방법입니다.
    (보안된 리소스에 액세스하기 위해 OAuth를 이용할 수도 있고, 간단히 로그인하기 위해 OAuth를 이용할 수도 있습니다.)

    OAuth는 인증(Authentication)이 아니라 권한 부여(Authorization)에 관한 것입니다.

     

    OAuth 장점 :

    1. OAuth는 클라이언트에게 ID/Password를 공유하지 않고, 대신 Authorization Token을 전달합니다.
    그래서 유저의 민감한 정보가 클라이언트(App)에게 노출될 일이 없고 인증 권한에 대해 미리 유저에게 허가를 구해야 하기 때문에 더 안전합니다.

     

    2. OAuth를 활용하여 자주 사용하는 서비스들(Google, Naver, KaKao 등)의 ID와 Password만 기억해 놓고 해당 서비스들을 통해서 로그인할 수 있기 때문에 매우 편리합니다.

     


    OAuth 비유 : 차량의 발렛 키

    : 발렛 키는 대리자가 자동차를 시동하고 이동할 수 있게 해주지만, 트렁크나 글로브 박스에 접근할 수는 없습니다.

     

     


    < OAuth에서 사용되는 용어 >

    • Resource Owner :  액세스 중인 리소스의 유저입니다. 홍길동의 구글 계정을 이용하여 App(클라이언트)에 로그인할 경우, 이때 Resource owner은 홍길동이 됩니다.

    • Client :  Resource owner를 대신하여 보호된 리소스에 액세스하는 응용프로그램입니다. 클라이언트는 서버, 데스크탑, 모바일 또는 다른 기타 장치가 될 수 있습니다.

    • Resource server :  client의 요청을 수락하고 응답할 수 있는 서버입니다.(유저의 리소스를 가지고 있는 서버)

    • Authorization server :  Resource server가 액세스 토큰을 발급받는 서버입니다. 즉 클라이언트 및 리소스 소유자를 성공적으로 인증한 후 액세스 토큰을 발급하는 서버를 말합니다.

    • Authorization grant :  클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명의 방법입니다. 대표적으로 'Authorization Code Grant Type'을 사용합니다.

    • Authorization code :  access token을 발급받기 전에 필요한 code입니다. client ID로 이 code를 받아온 후, client secret과 code를 이용해 Access token 을 받아옵니다.

    • Access token :  보호된 리소스에 액세스하는 데 사용되는 credentials입니다. Authorization code와 client secret을 이용해 받아온 이 Access token으로 이제 resource server에 접근을 할 수 있습니다.

    • Scope :  scope는 토큰의 권한을 정의합니다. 주어진 액세스 토큰을 사용하여 액세스할 수 있는 리소스의 범위입니다.

     

     

     


    < OAuth 작동 방식 > - Authorization Code Grant Type

    1. Resource Owner(User),

    2. Client(APP),

    3. Authorization Server,

    4. Resource Server

    를 이용해 실제로 OAuth - Authorization Code Grant Type이 작동하는 방식을 알아보겠습니다.

     

    Step 1 - 유저클라이언트(App)로 접근하여 Resource Server에 있는 정보를 요청합니다.

     

    Step 2 - 클라이언트(App)유저Authorization Server로 리다이렉트 합니다.

     

    Step 3 - 유저Authorization Server에게 클라이언트(App)가 정보에 액세스할 수 있는 권한을 부여하는 것에 동의합니다.

     

    Step 4 - Authorization Server클라이언트(App)에게 Authorization Code를 제공합니다.

     

    Step 5 - 클라이언트(App)는 받은 Authorization Code를 Authorization Server로 가져가 Access Token으로 교환합니다.

     

    Step 6 - 클라이언트(App)는 Access Token을 이용해 Resource Server에 있는 정보에 액세스할 수 있습니다.

     

    => Authorization Code를 받아옴(프론트엔드)

    => 받아온 Authorization Code를 백엔드로 전달(프론트엔드)

    => Authorization Code를 Access Token으로 교환(백엔드)

    => 받아온 Access Token을 프론트엔드로 전달(백엔드)

     

     

    +. Access Token을 받기 전에 Authorization Code 절차를 거치는 이유는 보안성 이유 때문입니다.

    클라이언트(App)에게 Client-secret을 공유하고 액세스 토큰을 가지고 오는 경우, 탈취될 위험이 있기 때문에 클라이언트에서는 Authorization Code만 받아오고 서버에서 Access Token 요청을 진행합니다.

     

     

     

     

    'Back-end' 카테고리의 다른 글

    Token Authentication  (0) 2022.02.23
    Cookie & Session  (1) 2022.02.22
    Introduction: Security, Authentication, and Authorization  (0) 2022.01.14
    What is the Back-End?  (0) 2021.11.02

    댓글

Designed by Tistory.