OAuth

코난·2024년 4월 8일
0

CS 면접 정리

목록 보기
47/67

OAuth란?

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신드르이 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이다.

너무 어려우니 쉽게 풀어서 설명하면 페이스북이나 카카오톡, 애플, 구글, 네이버 등의 외부 소셜 계정을 기반으로 간편하게 회원가입이나 로그인을 할 수 있는 웹 어플리케이션을 흔히 볼 수 있는데 바로 이때 사용되는 프로토콜이 바로 OAuth이다.

OAuth란 Open Authorization의 약자로 어플리케이션이 특정 시스템의 보호된 리소스에 접근하기 위해 사용자 인증(Authentication)을 통해 사용자의 리소스 접근 권한(Authorization)을 위임받는 것을 의미한다.

인증 VS 인가

인증(Authentication)

해당 사용자가 자신이 주장하는 사람인지 확인하는 것으로, 식별(identify)과 연관된 개념. 접근 자격이 있는지 검증하는 단게

인가(Authorization)

해당 사용자에게 리소스에 접근할 수 있는 권한을 부여하는 것으로, 접근(access)과 연관된 개념.

OAuth 구성 요소

  • Resource Owner

    • 웹 서비스를 이용하려는 유저, 자원(개인정보)을 소유하는 자, 사용자
    • Resource는 여기서 개인정보라고 생각하면 됨
  • Client

    • 자사 또는 개인이 만든 어플리케이션 서버
    • 클라이언트라는 이름은 Client가 Resource Server에게 필요한 자원을 요청하고 응답하는 관계여서임
  • Authorization Server

    • 권한을 부여(인증에 사용할 아이템을 제공해주는)해주는 서버
    • 사용자는 이 서버로 내 ID, PW를 넘겨 Authorization code를 발급받을 수 있음
    • Client는 이 서버로 Authorization code를 넘겨 Token을 발급받을 수 있음
  • Resource Server

    • 사용자의 개인정보를 가지고 있는 애플리케이션 회사 서버
    • Google, Facebook, Kakao, Naver, Apple 등의 서버를 뜻함
    • Client는 Token을 이 서버로 넘겨 개인정보를 응답받을 수 있음
  • Access Token

    • 자원에 대한 접근 권한을 Resource Owner(사용자)가 인가하였음을 나타내는 자격증명
  • Refresh Token

    • Client는 Authorization Server로부터 Access Token과 Refresh Token을 함께 부여 받음
    • Access Token은 보안상 비교적 짧은 만료 기간을 가져서 만료되면 사용자는 로그인을 다시 시도해야 함
    • 비교적 긴 만료기간을 가진 Refresh Token이 있다면 Access Token이 만료될 때 Refresh Token을 통해 Access Token을 재발급받아 재로그인 할 필요가 없게 해줌

로그인 요청 (1, 2번)

Resource Owner가 우리 서비스의 소셜 로그인 버튼을 클릭해 로그인을 요청한다. Client는 OAuth 프로세스를 시작하기 위해 사용자의 브라우저는 Authorization Server로 보내야 한다. Client는 Authorization Server가 제공하는 Authorizaiton URL에 여러 매개변수(response_type, redirect_uri, client_id, scope ...)를 쿼리 스트링으로 포함하여 보낸다.

로그인 페이지 제공 (3, 4번)

Client가 빌드한 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID와 PW 등을 입력하여 인증한다.

Authorization Code 발급, Redirect URI로 리다이렉트

위의 과정에서 인증에 성공했다면 Authorization Server는 제공된 Redirect URI로 사용자를 리다이렉션시킨다. 이때 Authorization Code를 포함한다. (Authorization Code란 Client가 Access Token을 획득하기 위해 사용하는 임시 코드임. 수명이 매우 짦음)

Authorization Code와 Access Token 교환

Client는 Authorization Server에 Authorization Code를 전달하고, Access Token을 응답받는다. Client는 발급받은 Resource Owner의 Access Token을 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용한다.

로그인 성공

Client는 Resource Owner에게 로그인이 성공하였음을 알린다.

Access Token으로 리소스 접근

Resource Owner가 Resource Server의 리소스가 필요한 기능을 Client에 요청한다. Client는 위 과정에서 발급받고 저장해둔 Resource Owner이 Access Token을 사용하여 제한된 리소스에 접근하고, Resource Owner에게 자사의 서비스를 제공한다.
만약 Access Token 기간이 만료되어 401 에러가 나면 Refresh Token을 통해 Access Token을 재발급한다.
(보통 Resource Server는 Access Token을 발급할 때 Refresh Token을 함께 발급해준다. Client는 두 Token을 모두 저장해두고 Resource Server의 API를 호출할 때는 Access Token을 사용한다.)


참고

https://hudi.blog/oauth-2.0/
https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-OAuth-20-%EA%B0%9C%EB%85%90-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
https://iam.furo.one/post/concept-oauth

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글