시작에 앞서

본 내용은 "생활코딩 oAuth2.0"을 보고 작성한 내용으로, 이미지와 코드는 해당 강좌에서 포함 된 것입니다.
개발공부를 처음 하기 때문에 단어사용와 의미출처에서 오류가 있을 수 있습니다. 수정사항은 댓글로 부탁드립니다.

여는 글

대부분의 서비스들이 소셜계정(페이스북, 카카오, 네이버)을 통해 로그인 기능을 구성하고 있습니다. 일일히 아이디,비밀번호로를 입력하지 않아도 되고 속도도 빠릅니다. 이런 기능은 oAuth를 통해 가능합니다. 자세히 말하면, oAuth와 passport.js 덕분입니다.

이번 글을 시작으로 oAuth에 대해 알고 passport.js를 적용해 간단한 튜토리얼을 만들어 보고자 합니다.

글의 목차

1. oAuth를 구성하는 이해 관계자들은 누구?

2. "Resource Server" VS "Resource Owner" VS "client" 관계 이해

1. oAuth의 이해 관계자들

oAuth는 다음의 3명의 이해관계자들이 있습니다.

Resource Server(리소스 서버): 제어할 수 있는 자원을 가진 서버
Resource Owner(리소스 오너): 자원의 소유자
client(클라이언트): 리소스 서버에 접속해서 정보를 가져가는 대상

Resource Server

kakao, facebook, naver 회사를 의미합니다.
client와 Resource Owner가 사용하는 자원(Reource)들을 관리하며 값의 유효성를 확인합니다.
여기서 자원(Resource)은 유저의 정보 혹은 로그인 서비스를 제어하는 데 필요한 요소라고 생각하면 됩니다.
즉 우리가 제어하려는 자원(Resource)을 가지고 있는 서버(Server)라는 뜻에서 리소스 서버라(Resource Server) 합니다.

Resource Owner

우리의 서비스를 이용하는 유저(User)를 가리킵니다.
어플리케이션을 이용하는 동시에 로그인을 하는 역할로 위 명칭을 갖게 되지 않았나 추측합니다.
즉, 로그인 자원(Resource)를 가지고 있는 사람(Owner)으로 해당 서비스를 이용하려는 유저(User)입니다.

client

우리의 현재 만들고 있는 서비스(service) 혹은 어플리케이션(application)을 가리킵니다.
client, 클라이언트 라는 이유는 client가 Resource server에게 필요한 자원을 요청하고 응답하는 관계여서 그런 이름이 부여되지 않았나 추측해 봅니다.

2. "Resource Server" VS "Resource Owner" VS "client" 관계 이해

client(우리 서비스)는 Resource Owner(사용자)를 대신해 로그인 하는데, 이때 필요한 정보를 Resource Server(kakao)에서 얻어 서로 비교해 유효성을 판단합니다.

기존에 유저가 자신의 ID와 PASSWORD를 입력해 로그인하는 대신,
client가 유저의 (로그인)정보/자원(resource)을 Resource Server(ex kakao)에 요청해 대신 로그인 합니다.

이를 위해서는 client는 다음 단계들을 가집니다.

  1. Resource Owner로 부터 동의(허용)
  2. Resource Server로 부터 client 신원확인

왜 그래야 할까?
각각의 입장에서 생각해봅시다.

1.Resource Owner(유저) 입장

자신의 정보를 대신 사용하기 때문에 client가 어떤 정보를 활용하는지, 어떤 기능을 사용하려는지 모를 수 있습니다.
그러므로 client는 Resource Owner의 동의를 구해야 합니다.

2.Resource Server(kakao) 입장

다른 사람의 일을 대신 해주는 사람이 정말 그 사람일지 궁금할 수 있습니다.
마찬가지로 Resource Owner의 일을 수행 해주는 client가 정말 그 client일까 하는 물음이 있다. 이런 의미에서 Resource Server는 Resource Owner의 브라우저를 통해 client를 구분하는 값(code)를 전달합니다.

마무리

지금까지 oAuth를 구성하는 이해관계자들과 각각의 관계를 살펴봤습니다. 다음글에서는 각각의 구성들이 어떻게 작동하는지 설명하겠습니다.