개발자들이 좋아하는 말중에 바퀴를 다시 발명하지 말라는 말이 있습니다... 괜한 삽질 하지말고 잘 만들어져있는 거 가져다 쓰라는 말인데요.. 저도 인증으로 괜한 삽질을 한바탕 마친후 있는 거 가져다 쓰기로 마음 먹고 cognito를 사용해보게 되었습니다. cognito는 aws 에서 제공하는 인증 및 사용자 관리 서비스인데요, 아주 간편하고 좋더구만요. 총 2편으로 1편에서는 간단하게 google oauth2를 구현하고 2편에서는 lambda 트리거를 이용하여 사용자 가입 전후처리를 해보겠습니다.
1. 사용자 풀 생성
먼저 aws cognito 콘솔에서 사용자 풀을 생성해줍니다. 일단은 기본 설정으로 해도 무방합니다.
그리고나서 사용자 풀에서 앱 클라이언트를 생성합니다. 역시 설정은 건들지않겠습니다.
왼쪽 내비게이션 바에서 domain name을 선택후 원하는 도메인 이름을 작성해줍니다. 중앙의 url이 cognito의 도메인 주소가 됩니다.
2. Google API Console 프로젝트 생성
google api 프로젝트가 없다면 https://console.developers.google.com/apis
이 주소에서 프로젝트를 생성합니다.
3. OAuth 동의 화면 구성
화면 왼쪽 내비게이션 바에서 oauth 동의 화면 구성을 선택합니다.
application의 이름을 작성하고 승인된 도메인란에 amazoncognito.com를 추가해줍니다.
4. oauth credentail 만들기
1) 화면 왼쪽 내비게이션 바에서 사용자 인증정보를 선택합니다.
2) 사용자 인증정보 + 버튼을 클릭 후 Oauth client ID를 선택합니다.
3) 애플리케이션 유형은 웹애플리케이션을 선택합니다.
4) 승인된 자바스크립트 출처에 Amazon Cognito 도메인(https://<domain>.auth.<region>.amazoncognito.com)을 입력합니다.
5) 승인된 리디렉션 uri에 https://<domain>.auth.<region>.amazoncognito.com/oauth2/idpresponse을 입력합니다.
** <domain>에는 위에서 작성했던 domain 이름을, <region>에는 cognito를 사용하는 region을 넣어주세요.
5. 사용자 풀에서 Google을 연동 IdP로 구성하기
cognito 콘솔에서 왼쪽 내비게이션 바의 Federation, Identity providers을 클릭하고 identity provider로 google을 선택합니다.
google app id에는 위에서 생성한 credentail의 클라이언트 ID를 붙여넣고 App secret 에는 시크릿 키를 붙여넣습니다.
Authorize scope은 말그대로 인증 범위인데요, 구글의 경우는 띄어쓰기로 구분을 해서 입력합니다. 일단은 위처럼 profile email openid라고 적어줍시다.
6.Google 속성에 사용자 풀 속성 매핑해주기
왼쪽 내비게이션 바에서 Federation, Attribute mapping을 선택합니다.
Google 탭을 선택한 후 email 옆의 체크박스를 클릭하고 user pool attribute 목록에서 email을 선택합니다.
7.사용자 풀의 앱 클라이언트 설정 변경
왼쪽 내비게이션 바에서 App integration, App client settings을 선택합니다.
Enabled Identity Providers 에서 Google을 선택해줍니다.
callback url과 sign out url에는 각각 로그인 후 , 로그아웃 후 리디렉션 시킬 url을 입력해줍니다.
allowed oauth flows는 oauth 인증 방법을 선택하는 부분입니다. 각각의 설명을 보자면 이렇습니다.
Authorization Code Grant Type : 권한 부여 코드 승인 타입
클라이언트가 다른 사용자 대신 특정 리소스에 접근을 요청할 때 사용됩니다. 리스소 접근을 위한 사용자 명과 비밀번호, 권한 서버에 요청해서 받은 권한 코드를 함께 활용하여 리소스에 대한 엑세스 토큰을 받는 방식입니다.
Implicit Grant Type : 암시적 승인
권한 부여 코드 승인 타입과 다르게 권한 코드 교환 단계 없이 엑세스 토큰을 즉시 반환받아 이를 인증에 이용하는 방식입니다.
Client Credentials Grant Type : 클라이언트 자격 증명 타입
클라이언트가 컨텍스트 외부에서 액세스 토큰을 얻어 특정 리소스에 접근을 요청할 때 사용하는 방식입니다.
저희는 단순하고 쉬운 Implicit Grant Type을 사용할 겁니다.
Allowed OAuth Scopes 에서는 email, openid, profile을 선택합니다. 위에서 구글을 IdP로 설정할 때 적어주었던 스코프들입니다.
8. 로그인 엔드포인트 URL
로그인을 하기 위한 url을 만들어봅시다.
위에서 했던 것처럼 domain, region을 적어주고 <client_id>에는 app client setting에서 확인할 수 있는 cognito 앱의 id를 넣어줍니다.
<redirection_url>에는 로그인후 리다이렉트 url을 넣어줍니다.
9. 드디어 테스트
위의 주소를 브라우저에서 테스트해봅시다.
여기까지 잘 왔다면 이런 모양새의 화면이 뜨게 됩니다.
google 계정을 이용해서 로그인을 해봅시다.
인증에 성공하면 app client setting에서 적었던 URL로 리다이렉션 되고 URL에 access token이 발행된 것을 확인 할 수 있습니다.
이렇게 간단하게 oauth2를 구현해보았습니다.
2편에서는 가입 전후 처리를 해주는 lambda trigger를 작성하고 인증이 필요한 lambda에 cognito를 연동시켜보겠습니다.
출처:
https://cheese10yun.github.io/oauth2/
https://aws.amazon.com/ko/premiumsupport/knowledge-center/cognito-google-social-identity-provider/
'미분류' 카테고리의 다른 글
Go 기본문법 1 (0) | 2021.04.25 |
---|---|
터미널을 귀엽게 꾸며봅시다 (mac 기준) (0) | 2021.03.21 |
Docker 개념 정리 (0) | 2021.03.07 |
aws cognito 사용해보기 2. jets로 pre-signup lambda trigger 걸기 (0) | 2020.03.18 |
airflow 시작해보기 1 - 설치 (0) | 2019.12.12 |
댓글