Amazon Cognito 이용하여 인증기능 구현하기.
AWS Cognito는 AWS에서 제공하는 인증 및 권한 부여 서비스이다.
AWS Cognito를 사용하면 애플리케이션의 사용자 인증, 사용자 데이터 동기화 및 액세스 제어를 쉽게 관리할 수 있다.
이를 통해 개발자는 사용자 등록, 로그인, 비밀번호 복구 등과 같은 기능을 간단하게 구현할 수 있다.
AWS Cognito는 다음과 같은 주요 기능을 제공한다.
- 사용자 풀(User Pools) : 사용자 풀은 사용자 등록, 로그인 및 계정 관리와 관련된 기능을 제공한다. 이를 통해 사용자가 애플리케이션에 둥록하고 로그인할 수 있으며, 소셜 로그인을 포함한 다양한 인증 방법을 지원한다.
- 아이덴티티 풀(Identity Pools) : 사용자 풀에 저장된 정보를 바탕으로 로그인 또는 회원가입에 성공한 사용자에게 AWS 인프라의 여러 서비스에 대한 권한을 부여할 수 있는 서비스.
- 연동 소셜 로그인 : AWS Cognito는 페이스북, 구글, 애플 등과 같은 소셜 로그인 기능을 제원하여 사용자가 소셜 미디어 계정으로 로그인할 수 있게 한다.
AWS Cognito를 사용하면 사용자 인증 및 권한 관리를 보다 쉽게 구현할 수 있으며, 이와 관련된 보안 문제를 AWS에서 관리해주기 때문에 개발자는 애플리케이션 로직에 더 집중할 수 있다.
Cognito Token 이용하기
유저가 로그인에 성공하면, Cognito는 세션을 생성하고 인증된 사용자에게 ID token, access token, refresh token을 리턴한다.
토큰은 API Gateway나 자체 구성된 server-side 리소스에 인증 목적으로 사용할 수 있다.
Cognito Identity Pool을 이용해서 이 토큰들을 API Gateway가 아닌 AWS 서비스에 접근하기 위해 임시 AWS Credentials로 바꿀 수도 있다.
종류
- ID token (자격 증명 토큰) : 로그인한 사용자의 자격 증명 클레임을 기반으로 API 호출 권한을 부여하는데 사용.
- Access token (액세스 토큰) : 지정된 액세스 보호 리소스의 사용자 지정 범위를 기반으로 API 호출 권한을 부여하는 데 사용.
- Refresh token (리프레스 토큰) : 신규 ID/액세스 토큰을 발급받는다. 리프레시 토큰의 default 만료 기간은 30일이며, 60분~10년 사이로 설정 가능하다.
특징
Cognito에서 발행하는 토큰은 클레임 기반의 토큰이다. Access/ID 토큰은 모두 cognito:groups라는 클레임을 포함한다.
- token : 유저를 인증하고, 리소스에 접근을 허용한다.
- clain : 토큰에 포함된 유저 관련 정보. 주체가 무엇인지 표현하는 이름과 값의 쌍.
Cognito는 Base64 인코딩 된 string 값으로 토큰 발행한다. Cognito ID 또는 access token을 Base64로부터 plaintext JSON으로 디코딩 가능하다.
regresh token 암호화되었으며 Cognito administrator나 유저로부터 읽힐 수 없다.
Architecture
- 인증(Authentication) : API를 호출하는 클라이언트에 대한 Identity(신분)을 확인해주는 기능.
- 인가(Authorization) : 클라이언트가 API를 호출할 수 있는 권한이 있는지 확인해주는 기능.
Cognito User Pool
사용자 풀은 사용자에 대한 정보를 가지고 있는 저장소와 같은 역할.
위에서 언급했듯이 여러가지 방법의 로그인 또는 회원가입을 지원.
성공적으로 사용자 인증 과정이 완료되면, Cognito는 JSON 형식의 웹 토큰(JWT)를 발행하며, 이 토큰을 사용해 특정 API에 대한 접근 보안 등 자격 증명을 수행하거나 AWS의 자격 증명으로 교환.
또한 사용자 풀의 모든 사용자는 그들 각각의 프로필을 가지고 있으며, SDK(javascript, Android, iOS)를 통해 프로필에 접근할 수 있다.
사용자 풀이 제공하는 기능
가입 및 로그인
수정 가능한 사용자 로그인을 위한 웹 UI
Facebook, Google, Amazon, Apple을 통한 소셜 로그인 및 사용자 풀의 SAML 자격 증명 공급자를 통한 로그인
사용자 관리 및 사용자 프로필
멀티 팩터 인증(MFA, 2중 인증), 이상 자격 증명 확인, 계정 탈취 보호, 전화 및 이메일 확인과 같은 보안 기능
AWS Lambda 트리거를 이용한 Cognito의 인증 과정 등의 커스터마이징
사용자 풀의 인증 flow
현대식 인증 과정에는 사용자 인증을 위해 단순히 아이디, 암호 인증 외에도 여러가지 챌린지가 통합되어 있다.
크게 인증은 두가지 단계로 일반화 할 수 있으며, 이들은 각각 InitiateAuth와 RespondToAuthChallenge API를 통해 구현된다.
인증이 실패하여 종료하거나 인증이 완료되어 토큰이 발행될 때까지 사용자는 순차적으로 사전에 정의된 챌린지들을 수행하게 된다.
챌린지는 만들고자 하는 앱에서 필요한 만큼 반복이 가능.
이는 Cognito에서 개발자가 요구하는 복잡한 인증과정도 구현이 가능하게 한다.
자격 증명 풀(Identity Pools)
자격 증명 풀은 특정 사용자의 고유한 자격 증명을 만들고 사용자에게 AWS 인프라에 대한 접근권한을 부여할 수 있다.
- Cognito user pool 사용자
- Facebook, Google, Apple, SAML 인증 공급자로 인증된 사용자
- 기존의 인증 프로세스(서비스의 자체 인증 등)를 통해 인증된 사용자
자격 증명 풀을 이용하면 다른 AWS 서비스에 직접 접근하거나 API Gateway를 통해 서비스에 접근하도록 정의하는 권한을 가진 임시 AWS 자격 증명을 생성할 수 있다.
자격 증명 풀 인증 flow
자격 증명 풀의 인증 flow는 외부 소셜 로그인, 기존의 인증 프로세스를 통한 사용자에게 발급되는 자격 증명에 대한 인증 flow이며, 크게 4가지가 있다.
외부 공급자 인증 flow
2가지의 인증 방식이 존재하며, 이들 각각을 향상된 인증 흐름, 기본 인증 흐름으로 부른다.
향상된 인증 flow
2단계로 자격 증명을 발급받을 수 있는 flow이며,
- GetId
- GetCredentialsForIdentity
두번의 통신(디바이스와 Cognito간 통신을 의미)으로 자격 증명을 발급받을 수 있는 flow이다.
기본 인증 flow
단계로 자격 증명을 발급받을 수 있는 flow이며,
- GetId
- GetOpenIdToken
- AssumeRoleWithWebIdentity
세번의 통신(디바이스와 Cognito간 통신을 의미)으로 자격 증명을 발급받을 수 있는 flow.
개발자 인증 자격 증명 인증 flow
자체 인증 시스템에서 인증된 사용자를 위한 자격 증명 인증 flow.
2가지의 인증 방식이 존재하며, 이들 각각을 향상된 인증 흐름, 기본 인증 흐름으로 부른다.
2단계로 자격 증명을 발급받을 수 있는 flow이며,
- 자체 시스템에서 로그인
- 자체 시스템에서 로그인 검증
- GetOpenIdTokenForDeveloperIdentity
- GetCredentialsForIdentity
과정으로 구성되어 있다.
참고
https://hyeon-joo.tistory.com/33
https://velog.io/@w1nu/%EC%89%BD%EA%B2%8C-%ED%92%80%EC%96%B4%EC%93%B4-AWS-Cognito-%EA%B8%B0%EC%B4%88-%EC%9D%B4%EB%A1%A0
https://velog.io/@jy3026/OAuth2.0%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
Amazon Cognito 이용하여 인증기능 구현하기.
https://hamin7.github.io/2024/08/05/Adding-Authentication-to-API-Gateway-Using-AWS-Cognito/
install_url
to use ShareThis. Please set it in _config.yml
.