본문 바로가기

AWS/Cognito

Cognito 소셜 로그인 추가 (이론)

일반적인 소셜 로그인은 아래와 같은 단계로 수행됩니다.

  1. 구글, 페이스북과 같은 인증업체에 클라인언트 리디렉션 주소(My redirect)를 등록
  2. 클라이언트에서 앱 ID와 앱 Secret을 사용하여 인증업체의 인증사이트(Google Auth 또는 Facebook Auth)에 접속 (예를 들어, 구글의 경우 https://www.googleapis.com/userinfo/v2/me)
  3. 사용자가 해당 인증사이트에서 로그인
  4. 로그인이 완료되면 인증사이트는 1에서 등록한 리디렉션 주소에 사용자 정보를 암호화한 토큰을 함께 전송

 

Cognito 인증

 

AWS Cognito를 통해 소셜 로그인을 구현한 경우 아래와 같은 구조가 됩니다.

 

Cognito 소셜 인증

 

기존 인증업체의 리디렉션 주소에 Cognito에서 제공하는 리디렉션 주소가 입력되고, Cognito에는 클라이언트 리디렉션 주소(My redirect)가 입력됩니다.

즉, 클라이언트가 Cognito 인증사이트(Cognito Auth)에서 인증을 요청하면, 다시 Cognito에서 구글, 페이스북과 같은 인증업체에 인증을 하는 인증 대행 시스템입니다.

소셜 로그인 기능을 직접 구현하지 않고 Cognito에 연동시키는 이유는 무엇인가요?

Cognito를 통해서 직접 가입한 사용자와 인증업체를 통해서 가입한 사용자를 일관성있게 관리하기 위해서 입니다.

Cognito 사용자 관리 화면

 

Cognito에 인증업체를 연결시켜 놓으면, 사용자 정보를 Cognito 설정에 매핑시킬 수도 있고, 가입시 Pre-SiginUp 트리거를 통해 인증업체에서 넘어온 정보를 사전 가공할 수도 있습니다.

아래는 제가 만든 인스타그램 클론에서 사용자 사진과 제 구글 사용자 사진입니다. 구글을 통해 가입할 때 Pre-SiginUp 트리거를 사용해 사용자의 사진을 데이터베이스에 미리 저장해 놓았기 때문에, 이후에는 별다른 설정 없이 사용자 사진을 가져올 수 있는 것입니다.

인스타그램 클론 구글

저는 더 이상 구글 로그인과 AWS Cognito를 연결시켜서 사용하지 않습니다.

카카오, 네이버 지원이 안되기 때문에, 어차피 카카오, 네이버 로그인 기능을 서버에 따로 만들어야 합니다.

일관성이 떨어지기 때문에 구글 로그인 기능도 서버에 따로 만들어서 사용합니다.

그리고 페이스북을 통해 AWS Cognito에 연결하면 핸드폰 번호로 로그인할 때 버그가 발생하는거 같습니다.

'AWS > Cognito' 카테고리의 다른 글

Cognito ID 토큰 복호화  (0) 2020.05.22
Cognito Pre-SignUp 트리거  (0) 2020.05.13
Cognito 소셜 로그인 추가 (실전) - 구글  (0) 2020.05.13