OAuth 2.0

Sammy·2024년 4월 18일
0

Authorization

목록 보기
8/9

OAuth의 등장 배경

제3자 서비스에서 유저의 페이스북 친구목록을 연동한다던가 페이스북, 트위터 같은 SNS에 대신 글을 남기는 기능을 만들 수 있을 것이다.

단순하게 위 사진과 같은 방법을 사용하면 후디 닷컴 데이터베이스를 통해서 페이스북의 ID/PW 가 탈취 당했을 경우 피해 규모가 어마어마하게 커진다.
서비스는 사용자의 민감 정보를 직접 저장하고 관리해야한다는 부담도 생기고 유저 또한 자신의 정보를 신뢰할 수 없는 제3자에게 맡긴다는 것이 불만족스러울 것이다.

이를 위해 등장한 것이 OAuth 이다.

OAuth (Open Authorization)

구글, 페이스북, 트위터와 같은 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해 제3자 서비스가 사용자의 접근 권한을 위임 받을 수 있는 표준 프로토콜이다.

OAuth 2.0 의 주체

위에서 쓰여진 ‘사용자’, ‘제3자 서비스’, ‘타사 플랫폼(구글, 페이스북, 트위터)' 등을 부르는 용어에 대해 정리해보자.

Resource Owner

리소스 소유자로, 제3자 서비스를 이용하면서 타사 플랫폼에서 리소스를 소유하고 있는 사용자이다.

리소스는 ‘구글 캘린더 정보’, ‘페이스북 친구 목록’, ‘내 트윗 목록’ 등을 말한다.

Authorization & Resource Server

Resource Owner 를 인증하고, 클라이언트에게 액세스 토큰을 발급해주는 서버이다.

Resource Server 는 구글, 페이스북, 트위터와 같이 리소스를 가지고 있는 서버를 말한다.

Authorization Server 는 인증및 권한 부여를 위한 서버를 부르는 명칭이고, Resource Server 는 리소스를 보유하고 있는 서버를 의미한다.
개발자가 설계하는 방향에 따라, Authorization Server 는 Resource Server 에 하나로 통합되기도 한다.

Client

Resource Server의 리소스를 이용하고자 하는 서비스로, 보통 우리가 개발하려는 서비스를 말한다.

OAuth 2.0 동작과정 시퀀스 다이어그램

몇몇 step 에 대해서 조금 더 자세하게 알아보자.

  1. Client 가 Authorization Server에 로그인 요청을 보낼 때 함께 보내는 매개변수
    a. response_type: 반드시 code로 설정해야한다. 인증이 성공할 경우 클라이언트에게 Authorization Code를 발급한다는 의미이다.
    b. client_id: Resource Server 에 애플리케이션을 등록했을 때 발급받은 Client ID
    c. redirect_uri: Resource Server 에 애플리케이션을 등록했을 때 설정한 Redirect URI (e.g. https://example-app.com/callback)
    d. scope: 클라이언트가 부여받은 리소스 접근 권한 (e.g. create+delete)
https://authorization-server.com/auth?response_type=code
&client_id=29352735982374239857
&redirect_uri=https://example-app.com/callback
&scope=create+delete
  1. Authorization Code 란 Client가 Access Token 을 발급받기 위해 사용하는 임시코드이다.

    • 이 코드는 일반적으로 1~10분간 유효해서 수명이 매우 짧다.
  2. Authorization Code 와 Access Token 교환은 token 엔드포인트에서 이루어진다.

    • HTTP 요청 예시
      POST /oauth/token HTTP/1.1
      Host: authorization-server.com
      grant_type=authorization_code
      &code=xxxxxxxxxxx
      &redirect_uri=https://example-app.com/redirect
      &client_id=xxxxxxxxxx
      &client_secret=xxxxxxxxxx
    • 필수로 전달해야하는 매개변수
      • grant_type: 애플리케이션이 액세스 토큰을 받는 방식. 항상 authorization_code 로 설정한다. (다른 타입은 무엇이 있는지 알아보기)
      • code: 발급받은 authorization_code
      • redirect_uri : Redirect URI
      • client_id : Client ID
      • client_secret: Optional, Client Secret 이 발급된 경우 포함하여 요청해야한다. (어떤 용도로 사용하는지?)

reference
OAuth 2.0 개념과 동작원리

profile
Web Developer

0개의 댓글