본문으로 바로가기

aws cognito pw없이 로그인 하기

category 개발/AWS 2019.05.08 16:13

로그인은 우리에게 아주 친숙한 기능이고 맨날 id넣고 비밀번호 찾기 하고 등 웹 서비스에서 아주 기본이다. 하지만 보안, 인증 등과 관련 되어 있기 때문에 개발자가 구현 하는 로직 중에 가장 까다로운 로직이 아닐까 싶다.

특히나 금융쪽은 otp같은것도 받으니까 더욱더 복잡하다.

요즘에 카카오 로그인을 코그니토에 붙이고 있는데 카카오에서 토큰을 받은 다음에 서버에서 토큰을 가지고 사용자 email등 정보를 받아온 후 우리 사이트의 cognito 인증까지 받아야 로그인이 된다. 헉.. 헉.. 헉... ㅋㅋ

구현 하다보니 아래와 같이 구현 하면 될 것 같아서 몇번 읽다보니 영어로 읽는데 오래걸려서 번역 해놓고 볼려고 이 글을 쓴다.

위 다이어그램을 설명 해보면 아래와 같다.

1. 사용자는 로그인 폼에 이메일 주소를 입력한다. 로그인 버튼을 누르면 Amazon Cognito 유저 풀에 이메일 주소를 보낸다.

2. user pool은 "Define Auth Challenge" 람다 함수를 호출 한다. 이 람다 함수는 어떤 커스텀 챌린지(custom challenge)가 필요한지 결정한다.

3. user pool은 "Create Auth Challenge" 람다 함수를 호출한다. 이 람다 함수는 시크릿 로그인 코드와 Amazon SES를 이용해 사용자에게 인증 메일을 보낸다.

4. 사용자는 시크릿 로그인 코드를 메일함을 열어서 확인하고 커스텀 회원 가입 페이지에 입력한다. 회원가입 페이지는 사용자가 입력한 인증 코드를 코그니토로 보낸다.

5. user pool은 "Verify Auth Challenge Response"람다 함수를 호출한다. 이 함수는 사용자가 입력한 코드를 확인 한다.

6. user pool은 "Definition Auth Challenge"를 호출한다. 이 함수는 앞에서 사용자가 입력한 코드가 맞는지 확인한 결과를 받고 추가적으로 인증할게 더 있는지 확인한 후에 issueTokens:true를 user pool에 보낸다. user pool은 해당 사용자가 유효한 사용자라고 판단을 하고 유효한 토큰을 내려준다.

아래 글을 참고 하였음

https://aws.amazon.com/ko/blogs/mobile/implementing-passwordless-email-authentication-with-amazon-cognito/

[

Implementing passwordless email authentication with Amazon Cognito | Amazon Web Services

Having to remember passwords can be a pain, especially for passwords that you don’t use often. Like most people, you too are probably familiar with having to click the “forgot password” link or button on websites and apps. Many people are tempted to use ba

aws.amazon.com

](https://aws.amazon.com/blogs/mobile/implementing-passwordless-email-authentication-with-amazon-cognito/)

kakaoID로 signup할 때 custom field로 kakaoId를 넣고 가입하기.

Auth.signUp({
  username,
  password,
  attributes: {
    email,          // optional
    // other custom attributes
    'custom:kakaoId' : kakaoId
  },
  validationData: []  //optional
})
.then(data => {
  console.log(data);
  alert("회원가입이 완료 되었습니다.");
})
.catch(err => {
  console.log("err", err)
  if (err.code === "UsernameExistsException") {
    alert("사용자가 이미 존재 합니다.");
  }
});

댓글을 달아 주세요