정리/AWS

AWS Cognito를 이용한 소셜 로그인

원클릭쓰리버그 2022. 1. 21. 14:22
728x90

Cognito

 

Cognito란?

cognito를 이해하기 위해선 AWS가 무엇이고, Cognito는 어떤 역할을 하는지를 알 필요성이 있다.

 

AWS란

 - 아마존(Amazon)에서 제공하는 클라우드 서비스로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공하고 있다. 아마존은 웹 기반의 클라우드 플랫폼을 지원해주던 경향이 강했지만 점점 영역을 확장하며 모바일 및 게임에도 다양한 플랫폼을 소개해주고 있다.

 

AWS에 대해 좀더 알고 싶으면 이 블로그를 참고해보자. 정리가 아주 잘 되어 있다.

 

https://goddaehee.tistory.com/174

 

[AWS] 1.AWS란?

[AWS] 1.AWS란? 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS(Amazon Web Service) ] 입니다. : ) 얼마전 회사에서 AWS 교육지원을 해주기에 다녀왔다. 그중 가장 기초 부분만 먼저 정리해서 올려 보

goddaehee.tistory.com

 

 

그 중에서 Cognito는 사용자 인증 및 권한에 대한 지원플랫폼이다.

 

AWS에서는 크게 2개의 자격을 부여한다. 

- AuthN

- AuthR

 

AuthN는 사용자를 확인하고 검증된 사용자라고 말해주는 인증서와 같은 의미이다.

예를 들어 놀이동산에 매표소에서 고객의 나이, 금액 등을 확인하여 놀이동산에 들어갈 수 있는 티켓을 주는 행위가 AuthN이다.

 

그에 반해, AuthR은 어떤 일을 할 수 있는가? 에 대해 인가서, 권한서와 같은 의미이다.

사용자는 매표소에서 티켓을 구매할 수 있지만, 놀이기구를 실행시킬 수 있는 권한은 갖지 못한다.

직원은 직원증을 통해 인증이 가능하지만, 놀이동산 영업 시간 중에 놀이기구를 탈 수 있는 권한을 갖지 못한다.  

 

이러한 AuthN, AuthR과 관련된 AWS 서비스에 Cognito에 포함된다. 

 

 

AWS IAM을 먼저 보면 어떤 AuthN, AuthR 를 종합적으로 처리해주는 AWS 중간 플랫폼이다. 여기서 중간 플랫폼으로 칭하는 이유는 직접적으로 클라이언트에서 사용하는게 아닌 각종 플랫폼을 연결할 수 있게 중간에서 제어해주는 역할이기 때문에 그렇게 칭하였다.

 

Cognito는 로그인을 담당한다.

크게 2개로 나뉘는데, 사용자 풀(Userpool)과 자격 증명 풀(IdentityPool)이다.

 

UserPool을 이용하여 AuthN을 받고 Amazon API Gateway에 API 리소스를 접근하여 개발자가 Custom한 Lambda 함수를 실행하여 AWS의 다양한 플랫폼을 사용할 수 있게 해준다.

 

IdentityPool을 이용하여 Credentital을 받을 수 있으며, IAM에서 IdentityPool의 Credentital의 권한 을 설정할 수 있다. 이를 통해 개발자는 Credentital을 통해 권한받은 어떤 AWS 플랫폼에 접근할 수 있게 된다.

 

지금 까지 설명한 부분을 간단하게 설명한 그림이다.

 

 

 

Cognito 필요성

 

기존의 유저데이터에 대한 처리에 대한 불편함은 밑의 그림에서 알 수 있다.

 

 

이러한 문제점을 Cognito를 이용하여,

 

이외에도 AWS는 다양한 지역에서 글로벌 서비스하고 있어 글로벌 확장에도 편의성을 갖고 있다.

 

 

Cognito 흐름

 

 

다음은 IdentityPool을 이용한 Cognito 서비스 흐름을 그림으로 나타내었다.

 

1. 모바일 사용자의 신원을 확인한다.

2. Cognito Identity에서는 소셜 로그인 혹은 직접 로그인을 통해 ID Token을 부여한다.

3. 모바일 사용자는 AWS에서 토큰을 전달 한다. 토큰 정보에는 모바일 사용자의 정보와 로그인 신뢰도를 통한 접근 인가의 정도를 담고 있다.

4. 전달받은 토큰을 Cognito의 정보와 비교하여 확인한다. 

5. 확인한 결과값을 통해 인증이 되었다면 Credentials를 모바일 사용자에게 부여한다.

6. 모바일 사용자는 Credentials를 이용하여 권한 내의 Amazon 플랫폼을 이용한다.  

 

 

 

Userpool을 이용한 Cognito 서비스 흐름의 그림이다.

 

 

1. Amazon S3라는 서비스를 통해 SDK를 업데이트 및 관리한다는 그림이지만, 현재 우리가 보는 Cognito와는 상관없으니 넘어가자.

2.  클라이언트 사용자가 회원가입을 진행한다.

3.  사용자에 대한 인증코드를 받아 클라이언트 사용자인지 확인하는 과정이다. 

    현재 소셜 로그인(Google, Facebook, Apple, OpenID 등 )이 포함되어 있지 않은 그림이기 때문에 이런 흐름이지만        만약 소셜로그인으로 로그인할 경우 소셜 로그인 인증 공급자가 대신 처리해준다.

4.  인증이 여부를 확인 후, 로그인 및 인증 Token을 부여해준다.

5.  클라이언트 사용자는 Token을 Amazon API Gateway에 주면서 사용 권한을 요청한다.

6.  API Gateway는 이러한 Token을 Cognito userpool에 확인한다.

7.  확인한 결과 값에 대해 반환한다.

8.  허가되었다면, API Gateway에서 Token으로 수행할 명령어(Lambda)를 수행하여 클라이언트에 반환한다.

 

 

다음은  Userpool과 Identitypool을 통합한 서비스 흐름 그림이다.

 

 

 

위의 두 개의 흐름을 이해했다면 4번까지는 동일하니 넘어가도록 하자.

5. Token을  Cognito Identitypool에 접근하여 확인한 후, Credentials을 요청한다.

6. Token이 허가된다면 Credentials을 반환한다.

--여기서 클라이언트 사용자는 개발자가 설정한 IAM의 허가선에 따라서 Credentials를 통해 직접 접근이 가능하다.--

7. 이 부분은 내가 구현한 방법에 해당되지 않아 정확하게 설명하기 힘들지만,

Credentials를 SigV4로 변환한다음 API Gateway에 요구할 명령어(Lambda)와 SigV4를 보내야 하는 것으로 추정된다.

8. 확인 후 허가되면 응답한다.

 

 

 

다음 장에서 Cognito를 Untiy를 통해 구현해보자.

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

AWS with Unity (Lambda를 통한 DynamoDB 운영)  (0) 2022.01.25
APIGateway Lambda with UNITY  (0) 2022.01.24
AWS Cognito (Google) & Unity 구현  (0) 2022.01.21