OAuth #3 OAuth 2.0 동작 방식

hamingu·2021년 6월 14일
0

OAuth

목록 보기
3/5

지난 글에서는 OAuth 2.0이 무엇인지, 무슨 용도로 사용되는지, 그 전에는 어떻게 사용 되었는지? 등에 대해서 다루었다.

그러면서 잠깐 엑세스 토큰을 언급하기도 하였으며, OAuth 2.0의 동작방식 일부분을 설명하기도 했다.

이번 글에서는 OAuth 2.0의 동작 방식, 클라이언트 등록 등에 대해 설명하고자 한다
(클라이언트 - 서버 - DB로 이루어진 신뢰 클라이언트 기준의 동작 방식(인가코드 그랜트)을 설명하고자 합니다.)

🚨 본 글에는 클라이언트 등록을 위한 자세한 과정이 생략되어 있습니다. 학습한 내용을 바탕으로 이론적인 내용의 흐름을 정리한 것이니 참고 바랍니다!

소셜로그인 동작 방식

동작 방식을 순서대로 나열하기에 앞서 주체를 명확히 하고자 한다.

  • 사용자 : 이용하는 user를 뜻한다.
  • 애플리케이션 : 내가 운영하는 서비스(서버, 클라이언트)
  • 서비스 제공자 : 사용자가 클라이언트에서 소셜로그인을 시도할 때 그 소셜 서비스 제공자..!

1) 사용자가 애플리케이션에게 소셜 로그인을 요청한다.
2) 애플리케이션이 사용자에게 소셜 로그인을 위한 권한 위임을 요청한다(동의 화면을 띄워줌)
3) 서비스 제공자(소셜)가 사용자에게 애플리케이션한테 권한 위임을 할 것인지 묻는다
4) (사용자가 동의 한다면) 서비스 제공자가 애플리케이션 서버에게 사용자의 회원 정보에 접근할 수 있는 엑세스 토큰과 교환할 수 있도록 인가 코드를 전달한다.
5) 애플리케이션 서버는 다시 서비스 제공자에게 인가 코드를 전달하여 엑세스 토큰과의 교환을 요청한다
6) 서비스 제공자는 인가 코드를 확인하여 애플리케이션 서버에게 엑세스 토큰을 전달한다
7) 애플리케이션 서버는 엑세스 토큰으로 드디어 사용자의 회원 정보를 서비스 제공자에게 요청한다.
8) 서비스 제공자는 엑세스 토큰을 확인하여 사용자의 회원 정보를 반환해준다.

위 순서가 신뢰 클라이언트를 기준으로 소셜 로그인(또는 사용자를 대신해 서비스 제공자의 리소스에 접근하는)을 하는 과정이다.

어떻게 보면 사용자를 두고 서비스를 제공하는 두 집단이 무언가를 계속 주고받고 있다.

특히 애플리케이션 측은 서비스 제공자에게 요청하기 위해 인가 코드, 엑세스 토큰을 받고 다시 전달하고 있는데 이는 OAuth 2.0을 이용하고 있는 서비스 제공자 측에 애플리케이션이 클라이언트로 등록되어야 가능하다.

클라이언트가 되는 과정..!

위의 동작 방식을 수행하려면 서비스 제공자가 내가 어떤 어플리케이션인지를 알아야 하며
또한 인가 코드와 엑세스 토큰을 어디로 줘야하는지도 알아야할 것이다.

그러기 위해선 서비스 제공자의 클라이언트가 되어야하며 이는 약간의 등록 절차가 있다.

클라이언트 등록

기본적으로 OAuth 2.0 방식을 사용하는 서비스 제공자의 역할을 하는 곳에 클라이언트 등록 방식은 다 조금씩.. 또는 많이 다르다.

하지만 OAuth 2.0 프로토콜은 동일하며 절차만 다를 뿐이다.

서비스 제공자에게 클라이언트로 등록한다는 것은 해당 서비스 제공자와 당사간의 신뢰관계가 쌓인다는 것과 동일하며 클라이언트 등록 후엔 공통적으로 아래의 정보를 사용하게 된다

  • 클라이언트 ID
  • 클라이언트 시크릿(어플의 신원을 알려줄 때 사용)
  • 리다이렉션 엔드포인트(서비스 제공자가 응답하는 곳, 아까 말한 토큰 등을 전달할 곳)
  • 인가 엔드포인트(인가 플로우를 시작할 때 사용, 서비스 제공자가 결정)
  • 토큰 엔드포인트(토큰 플로우를 시작할 때 사용, 서비스 제공자가 결정)

서비스 제공자 쪽에서 안내하는 절차대로 클라이언트를 등록한다면 결국 공통적으로는 위 5개의 정보가 생기며, 앞으로 이 정보를 이용하여 사용자 대신 서비스 제공자의 리소스로 접근하여 정보를 전달받을 수 있게 된다.

다음 POST...

주말동안 학습한 내용을 한 번에 정리하다보니 뭔가 내용이 산으로..?까지 가지는 않지만 뭔가 많이 요악하고 급 마무리 하는 느낌이 있는 듯 하다..(내가 글을 잘 못쓰나보다)

우야든동.. OAuth 2.0에 대한 전체적인 흐름을 정리하고자 했고 조금 더 고생해서 정리해보자..! 일단 전체적인 흐름은 확실히 머리에 잡힌 듯 하다.

다음 POST에는 엑세스 토큰과 리프레쉬 토큰을 정리해보려 한다.

그리고 그동안 쓴 글에대한 흐름에서 백과 프론트가 담당하는 부분을 조금 나눠서 요약도 해보려한다 물론 제일 마지막에
(후론트 동기들을 위해...!)

profile
프로그래밍구

0개의 댓글