앞서 글을 썼다 시피 나는 카카오 API 로그인을 구현했었다.
해당 과정을 진행하며 고민되고 생각했던 것들을 적어보려 한다.

카카오 회원가입 시 비밀번호

카카오 로그인을 할 시, 우리 서비스 회원이 아니라면?
자동으로 회원가입을 진행하도록 구현을 해 놓았다.
자동으로 등록되는 정보는 아래와 같다.

  • 이메일과 프로필 사진은 필수 동의 항목이다.
    • 따라서 이메일과 프로필 사진은 카카오 계정을 그대로 사용한다.
  • 닉네임과 사는 동네는 따로 추가 회원가입을 진행한다.

아래의 화면과 같이 추가적으로 회원가입을 진행한다.
이미 만들어진 Member에 대해 upadate()를 하는 것이다.
추가가입
KakaoTalk_20230302_183643440

그렇다면 다른 건 다 괜찮은데 비밀번호는 어떻게 할 것인가?
아래와 같이 고정된 비밀번호 값을 정해 부여했다.
KakaoTalk_20230302_183522641

사실 보안상 이런 값은 좋지 않다고 생각한다.
모든 계정이 같은 비밀번호를 사용한다는 것은 매우 위험할 것이다.

UUID.random() 값을 부여해서 임의의 암호를 만들려 했으나,
authenticate() 함수 로직에 문제가 있어 우선 보류했다.
프로젝트가 완료된 뒤 보완 사항으로 발전 시킬 예정이다.

최소한 보안을 유지하기 위해, PasswordEncoder를 사용했다.
해당 암호화 알고리즘은 복호화하는 Method가 없다.
복호화가 가능하다면, 언제든 암호가 뚫릴 위험이 있다는 것이다.

또한, 일반 로그인 기능은 카카오 회원은 접근할 수 없게 막았다.
물론 그래도 보안상 안전하지 못한 부분이 있을 것이라 생각한다.

카카오 회원의 제한사항

서비스를 개발 할 때에는 예외 처리가 매우 중요하다고 생각한다.
물론 모든 예외를 커버하기란 불가능하다.
그래도 최대한 예상가능한 예외는 처리를 해주는게 좋다고 생각한다.

그렇다면 카카오 로그인을 진행한 회원이 있다고 생각해보자.
카카오 회원은 직접 회원가입을 한 것이 아닌, 자동회원 가입된 회원이다.
해당 회원이 서비스에서 발생시킬 수 있는 예외가 어떤 것이 있을까?
지금은 아래의 2가지 정도가 생각난다.

  1. 카카오 회원이지만 일반 로그인을 시도하려고 한다.
  2. 비밀번호를 변경하려고 시도한다.

일반 로그인을 시도하려는 경우

카카오로 로그인 한 회원들은 비밀번호를 알 수가 없는 구조이다.
하지만, 만에 하나 비밀번호를 알아내서 일반 로그인을 시도 한다면?
이는 사실상 해킹에 가까운 행동이라고 생각한다.

따라서 해당 회원이 카카오 회원인지 아닌지 Attribute에 표시하며,
프로바이더

만약 카카오 회원이라면, 아래와 같이 로그인을 제한하도록 한다.
카카오예외

비밀번호를 변경하려고 시도하는 경우

카카오 회원은 사실 카카오 계정만 알면 자동 로그인이 되기 때문에,
굳이 우리 서비스에 저장된 비밀번호를 알아야 할 필요가 없다.
그렇기 때문에 우리가 Random하게 비밀번호를 설정해주었다.
따라서 굳이 비밀번호를 변경할 상황은 잘 없을 것이다.

하지만 항상 예외 상황은 존재하는 법!
만약 카카오 회원이 비밀번호를 변경하게 된다면?
비밀번호가 변경되더라도 보안이나 서비스 상 문제는 없다고 생각한다.

하지만 일말의 가능성을 막기 위해서, 아래와 같이 막도록 구현했다.
카카오예외2