레이서 포트폴리오에는 구글 로그인 기능이 있다.
구글 로그인은 당연하게도 OAuth2를 이용해 구현되었다.
내가 이해한 OAuth2란 무엇인지 정리해보고 이번 프로젝트에서 구글 로그인 기능을 어떻게 구현했는지 정리해보자.
유저를 관리하는 사이트라면 보안을 위해서 신경써야할 것이 많다.
그러다보니 개발자의 실력에 따라 보안 수준이 천차만별이다.
그러면 보안 수준이 어느 정도 검증된 타사의 사이트에게 인증 과정을 떠넘기면 어떨까?
이때 사용하는 것이 OAuth2 다.
OAuth2는 인증 과정을 타사에게 위임하는 인증 방식이다.
OAuth2를 이용할 수 있는 대표적인 사이트로는 구글, 네이버, 카카오, 페이스북 등이 있다.
요즘 운영되는 사이트에 들어가보면 '구글 계정으로 로그인하기', '네이버 계정으로 로그인하기' 같은 기능들을 자주 봤을 것이다.
로그인 과정을 구글, 네이버에 맡기고 정말 유효한 유저라고 판단됐을 때 내 사이트의 서비스를 이용할 수 있게 해주는 것이다.
이렇게하면 로그인 인증을 전부다 해주고 유저의 정보만 넘겨주니 개발자의 입장에서는 보안적인 측면에서 신경써야할 까다로운 것들이 많이 줄어든다.
이번 프로젝트에서 구현한 구글 로그인 과정은 다음과 같다.
1. 클라이언트가 구글에게 로그인 요청을 보낸다. (React의 GoogleLoign 컴포넌트를 사용하여 쉽게 구현할 수 있다.)
2. 구글은 로그인 페이지를 제공한다.
3. 구글 로그인 페이지에서 로그인을 시도한다.
4. 로그인에 성공하면 구글은 유저의 ID 토큰을 클라이언트에게 넘겨준다.
5. 클라이언트는 서버에 ID 토큰과 함께 로그인 요청을 보낸다.
6. 서버에서는 구글의 토큰 검증 API에 요청을 보내 ID 토큰의 무결성을 검증한다.
7. ID 토큰의 무결성이 검증되면 유저의 이름과 이메일 정보를 추출하고 Access Token을 생성한다.
8. Access Token을 클라이언트에게 넘겨주며 인증과정을 마친다.
이 프로젝트에서는 오직 '로그인 기능' 만 필요했기 때문에 이렇게 구현할 수 있었다.
만약 내가 구글에서 '유저의 캘린더 정보 가져오기', '친구 목록 가져오기' 같은 기능을 사용하고 싶었다면 다른 절차가 필요하다.
구글 로그인을 통해 Authorization Code를 발급받고 이 Authorization Code 를 이용해 Access Token을 발급받아야 한다.
그리고 캘린더 정보를 가져오는 API를 호출할 때마다 Access Token을 함께 보내야 한다.
물론 여기서 말하는 Access Token은 서버의 서비스를 사용할 때 사용되는 Access Token이 아닌, 구글의 API에 접근하기 위해 사용되는 토큰이다.
OAuth2에 대해 대략적으로 이해를 하고 구글 로그인 기능을 간단하게 구현해봤다.
앞서 OAuth2를 지원하는 곳들은 구글 외에도 네이버, 카카오, 페이스북 등 많은 곳이 있다고 했는데 당연하게도 사이트마다 OAuth2 사용법이 다르다.
토큰이 어떻게 받아지는지, 토큰의 무결성을 확인하기 위해 절차가 요구되는지 사이트마다 모두 다르다.
그렇지만 OAuth2에 대해 정확히 이해 했다면 각 사이트에서 제공하는 문서를 참고해서 쉽게 서비스를 이용할 수 있다.
'Project' 카테고리의 다른 글
[Architecture] 웹 구조 설계하기 (0) | 2021.10.29 |
---|---|
[CORS] CORS는 무엇일까? (0) | 2021.09.06 |
[Azure] 클라우드 스토리지를 사용해보자 (0) | 2021.08.30 |
[Bcrypt] 비밀번호를 안전하게 저장하자 (0) | 2021.08.29 |
[JWT] Refresh Token 은 어떻게 관리할까? (0) | 2021.08.29 |