[AWS] Cognito 사용자 풀 생성하기


AWS Cognito 란?

웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공한다. 사용자는 사용자 이름과 암호를 사용하여 직접 로그인하거나 Facebook, Amazon, Google 또는 Apple 같은 타사를 통해 로그인할 수 있다.

간단하다. 인증과 인가처리를 제공해준다.

인증과 인가는 직접 로그인처리를 하느냐, 아니면 다른 서비스(구글, 네이버 카카오톡 로그인) 를 이용하여 유저에 대한 권한을 허락 하느냐 의 차이라고 생각하면된다. (인증과 인가에 대한 더 자세한 내용은 다음에 포스트를 통해 설명하겠다.)

그렇다면 이걸 왜 쓰느냐?
웹에서는 OAuth2 가 추가 될 때마다 OAuth2 인증 정보 등을 소스상에 추가해줘야 하는 번거로움이 있다. Cognito 는 사용자 풀에서 설정만 해주면 되기 때문에 비교적 간단하고 UI의 커스텀도 가능하다.

위와 같은 장점이 있지만 아마 가장 큰 이유는 개인정보에 대한 관리 떄문이 아닐까 싶다. 모든 시스템이 해킹에서 자유로울 수는 없겠지만, AWS 라는 글로벌기업이라는 타이틀에서 오는 믿음과 서비스를 이용하면 AWS의 보안팀에서 모니터링을 하며 비정상적인 활동이 발생하면 사용자에게 메일로 알람을 주는데 이러한 이유가 크지 않을까 생각한다.


사용자 풀 생성하기

AWS

이름

toyseven-cognito 입력

AWS

속성 (풀을 생성하게 되면 이후에는 수정이 안됨)

이메일 주소 또는 전화번호 선택 후 이메일 주소 허용 을 선택한다. 나머지는 건들지 않음.

AWS

AWS

정책

패스워드에 관련 된 설정사항이다.
변경하지 않고 다음 단계로 넘어간다.

AWS

MFA

멀티 인증 관련 설정이다. (로그인 시 SMS 등으로 받은 문자 입력)
변경하지 않고 다음 단계로 넘어간다.

SMS MFA 는 지원 종료 예정이니 참고 바란다. AWS Document

AWS

AWS

메시지 사용자 지정

변경하지 않고 다음 단계로 넘어간다.

태그

변경하지 않고 다음 단계로 넘어간다.

디바이스

변경하지 않고 다음 단계로 넘어간다.

앱 클라이언트

변경하지 않고 다음 단계로 넘어간다.
(풀 생성 후 작업이 가능합니다.)

트리거

변경하지 않고 다음 단계로 넘어간다.

검토

풀을 생성한다.

AWS

AWS


앱 클라이언트 생성

여기서 클라이언트 보안키 생성 부분을 체크 해제 합니다.
OAuth2 Flow 에서 Implicit grant 를 사용하신다면 체크 해도 상관 없지만, 우리는 Refresh Token 을 발급 받기 위해 Authorization code grant Flow 를 사용 할 계획이기 떄문에 체크 해제 합니다.

AWS

AWS

생성 된 앱클라이언트 확인이 가능하다.

AWS


앱 클라이언트 설정

유저 풀과 OAuth2 설정이 가능하다.

콜백 URL 과 로그아웃 URL은 localhost 로 설정해야 접근이 가능하니 참고 바란다.
(본인은 둘 다 http://localhost:3000 입력)

OAuth2 Flow 에서 Implicit grant 를 체크 할 경우 Refresh Token 이 발급되지 않는다.

  • Implicit grant 체크 시 response type token 사용 가능
  • Authorization code grant 체크 시 response type code 사용 가능

AWS


도메인

사용 할 도메인을 입력 한 다음 가용성 여부 확인 후 저장한다.

AWS


마치며

앱 클라이언트를 생성 할 때 보안키를 생성하면, Cognito 로그인 완료 후 /oauth2/token 에 대한 Response 가 400 에러와 함께 {“error”:”invalid_client”} 를 토해내게 된다. 이유는 보안키가 존재할 때는 /oauth2/token Endpoint 에 접근 시 client secret 값을 함께 가지고 가야 하는데, 존재하지 않기 때문이다. (3일간 삽질끝에 발견했다.)

1
2
3
4
5
6
7
8
9
10
11
// client secret 사용 시 request 예시

curl -X POST \
'https://<Cognito User Pool Domain>/oauth2/token?
grant_type=authorization_code&
code=8a24d2df-07b9-41e1-bb5c-c269e87838df&
redirect_uri=http://localhost&
client_secret=xcxxxs2r234XXXXXX&
client_id=55pb79dl8gm0i1ho9hdrXXXXXX' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Content-Type: application/x-www-form-urlencoded'

해당 에러에 대해 자세히 알고 싶다면 아래의 사이트를 참고 바란다.


이제 Cognito 사용 할 준비를 마쳤고, 다음 챕터에서 Google OAuth2 연동방법에 대해 알아보겠습니다.

Leave a comment