7/23 NextAuth 로그인 구현 Email Sign-In? Credential Sign-In?

낄낄박사·2024년 7월 23일

Gotcha

목록 보기
6/22

해야하는 일

  1. 사용자 검증 함수 작성: credentialsProvider의 authorize에 사용될 findUserByUsername과 verifyPassword 함수 작성.
  2. 회원가입 폼 작성: 이미 작성된 SignupForm 컴포넌트를 수정하여 폼 제출 시 fetch를 사용해 서버로 데이터를 전송하기
  3. API 엔드포인트 작성: 회원가입 요청을 처리할 API 엔드포인트 작성.
  4. 사용자 데이터베이스 저장: 사용자 정보를 데이터베이스에 저장.

Email Sign-In

  • 작동 방식: 사용자가 이메일 주소를 입력하면 인증 링크가 포함된 이메일이 전송됨. 사용자는 이 링크를 클릭하여 로그인 절차를 완료하는 방식이다.
  • 보안: 이메일을 통해 인증하므로 비밀번호 없이도 안전하게 로그인이 가능함.
  • 사용 사례: 비밀번호 관리의 번거로움을 줄이고 싶거나, 비밀번호 없이 간편한 로그인을 제공하고 싶을 때 유용하다고 함. 이런 방식을 사용해본 적이 있는지 잘 기억이 안남..

Credential Sign-In(자격 증명 로그인)

  • 작동 방식: 사용자가 이메일(또는 사용자명)과 비밀번호를 입력하여 로그인함.
  • 보안: 비밀번호를 입력하므로, 비밀번호 보안이 중요함. 일반적으로 비밀번호는 해싱하여 저장한다고 한다. 이건 더 찾아봐야겠음
  • 사용 사례: 전통적인 로그인 방식이고 사용자에게 익숙한 로그인 방식. 기존의 비밀번호 기반 인증을 사용하고자 할 때 유용.

그래서 내가 생각하고 있는 이메일 로그인 방식이란 credential 방식이었음.

페이지

공식문에서보면 페이지 구성은 아래처럼 하고 있음.

로그인 form을 만들때 input을 hidden 처리해서 defaultValue 값으로 csrfToken을 넘겨준다.

csrfToken이 뭘까?

CSRF?

CSRF(Cross-Site Request Forgery)는 악의적인 사이트가 사용자를속여서 사용자가 의도하지 않은 요청을 서버로 보내게 하는 공격 기법이라고 함. 예를 들면, 사용자가 악의적인 사이트에 접속한 상태에서 로그인된 사이트로 요청을 보내면, 해당 요청이 사용자가 원하지 않는 행동을 수행할 수 있다. 이를 방지하기 위해 CSRF 토큰을 사용한다.

CSRF 토큰의 역할

CSRF 토큰은 서버가 폼을 렌더링할 때 생성하는 고유한 토큰으로, 해당 폼을 통해 제출된 요청이 올바른 사용자가 보낸 것인지 확인하고 CSRF 공격을 방지하는 역할을 한다.

CSRF 공격 방지 원리

  • 고유 토큰 생성: 서버가 폼을 렌더링할 때 고유한 CSRF 토큰을 생성
  • 토큰 포함 폼 렌더링: 이 토큰을 폼의 hidden input 필드에 포함시켜 클라이언트(사용자 브라우저)로 전달.
  • 폼 제출 시 토큰 검증: 사용자가 폼을 제출할 때, 서버는 제출된 데이터에 포함된 CSRF 토큰이 원래 서버에서 생성한 토큰과 일치하는지 검증.

공격 여부 판단

  • 일치하는 경우: 제출된 CSRF 토큰이 서버가 생성한 토큰과 일치하면, 이는 사용자가 의도적으로 해당 폼을 제출한 것이라고 판단한다. 따라서 요청이 정상적으로 처리된다.
  • 일치하지 않는 경우: 제출된 CSRF 토큰이 서버가 생성한 토큰과 일치하지 않으면, 이는 외부에서 조작된 요청일 가능성이 크다고 판단한다. CSRF 공격의 경우, 공격자는 사용자의 인증 정보를 사용해 서버에 요청을 보내지만, CSRF 토큰을 알 수 없기 때문에 일치하지 않게 된다.

0개의 댓글