[구글 소셜 로그인 구현] OAuth의 개념과 동작 원리

2024. 4. 5. 10:51프로젝트/인증

728x90

 

더보기

개요

 

모니터링 웹 개발을 하면서 로그인 구현 작업을 할 차례가 왔다.

로그인에 대한 아무 기획도 정해지지 않아 어떻게 처리할까 고민하던 중 어차피 우리 회사 사람들만 이용하고

나의 경우 비밀번호를 잘 잊어버리는 탓에 한가지 비밀번호로만 쭉 사용하는데, 아무리 암호화를 한다 한들 우리 회사 개발자라면 복호화로 다 알아낼 수 있는 비밀번호를 회사 DB에 관리하기 싫어 소셜 로그인을 이용하기로 했다.

 

우리 회사 계정은 구글을 이용하기에 계정 정보 관리를 구글에 위임하는 방법을 선택을 한 것이다.

먼저 소셜 로그인 구현을 하기 전 소셜 로그인 동작에 대해 짚고 넘어가고자 한다.

 

1. OAuth의 개념

나무위키

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

이 매커니즘은 여러 기업들에 의해 사용되는데, 이를테면 아마존, 구글, Apple, 페이스북, 마이크로소프트, 트위터 등이 있으며 사용자들이 타사 애플리케이션이나 웹사이트의 계정에 관한 정보를 공유할 수 있게 허용한다.

 

 

2. 구성 요소

구성요소 설명
Resource Owner 서비스를 이용하는 사용자로 ID와 Password를 가지고 로그인 하는 주체이다.
Client 서비스 애플리케이션 서버.
즉, 내가 만들 모니터링 웹 페이지 서버가 이에 해당한다.
Authorization Server 사용자 정보를 인증해주고 권한을 부여해주는 서버
Resource Server 사용자 개인정보를 가지고 있는 서버로 카카오, 구글, 네이버 등이 이에 해당한다.
Access Token Resource Server에서 제공하는 API를 호출할 때 필요한 토큰으로 클라이언트가 Authrozation Code를 Authorization서버에 요청해서 이 코드를 Client에게 전달하면 Client는 Authorization Server에 Access Token을 발급받아 사용자에게 제공해준다.

Access Token으로 Resource Server에 API를 호출할 수 있게 해준다.
Refresh Token Access Token은 보안 상 유효 시간이 짧은데에 비해 Refresh Token은 긴 유효시간을 가지고 있다.

이 Refresh Token으로 Access Token을 갱신하여 사용자가 빈번한 로그인을 하지 않도록 해준다.

 

3. OAuth 동작 원리

시퀀스 다이어그램 상세보기

AOuth2.0 동작 원리 시퀀스 다이어그램

설명

  1. 사용자 [ Resource Owner ]는 서비스를 이용하기 위해 서버 접근 [ Client ] 을 요청한다.
  2. [ Client ] 는 사용자에 대한 로그인 정보가 없으면 [ Resource Owner ] 에게 redirect_uriclient_id 가 담긴 로그인 URL을 제공해준다.
  3. 사용자 [ Resource Owner ] 는 로그인 URL을 이용하여 [ Authorization Server ]가 제공해준 로그인 페이지를 요청한다.
  4. [ Authorization Server ] 는 사용자에게 로그인 페이지를 제공해준다.
  5. 사용자 [ Resource Owner ] 가 아이디와 비밀번호를 입력함으로서 로그인을 요청한다.
  6. 인증서버 [ Authorization Server ]Authorization Code를 사용자에게 제공해주면
  7. 용자 [ Resource Owner ]  는  Authorization Coderedirect_uri [Client] 서버에 접근함으로써 access token을 요청한다.
  8. [ Client ] 서버는 Authorization Code[ Authorization Server ] 에서 Access Token을 발급해달라고 요청을 한다.
  9. [ Client ] 서버가  [ Authorization Server ] 로 부터 발급받은 Access Token을 사용자에게 제공함으로써 사용자는 로그인에 성공한다.
  10. 사용자 [ Resource Owner ]Access Token으로 [ Client ] 에게 서비스를 요청하게 되면
  11. [ Client ] [ Resource Server ]로부터 해당 Access Token으로 리소스 접근 요청을하고
  12. [ Resource Server ]Authorization Code를 검증하고 검증이 성공하면 자신의 리소스 즉, 서비스를 제공한다.
  13. [ Client ][ Resource Server ] 에서 제공받은 서비스를 사용자가 이용할 수 있게 해준다.