📜 TIL

[Android] 서버 로그인 시 비밀번호 암호화 적용해주기

둥굴둥굴둥굴레차 2023. 2. 27. 20:02

비밀번호 암호화 기능 구현

  • 우선 기존앱에서 사용하던 암호화 클래스.kt 를 그대로 내 앱에 복붙하였다.
  • 그리고 회원가입을 위해 id와 password를 입력하고 enter버튼을 클릭했을 때 joinEmail(joinEmailRequest)를 실행시키는 소스코드(JoinFragment.kt)로 이동!
  • password값을 edittext.text로 바로 들고왔던 로직에서, 암호화를 적용시킨 password값으로 전환시키는 로직을 추가했다.
binding.joinEnterButton.enterButtonRoot.setOnClickListener {
            val joinEmailRequest = JoinEmailRequest()
            val 암호화 = 암호화클래스(클라이언트 아이디)
            val password = binding.joinPwInput.pwLayoutTextInputEditText.text.toString()
            val cipherPassword = 암호화.encrypt(password)

            joinEmailRequest.userId = binding.joinIdInput.idLayoutTextInputEditText.text.toString()
            joinEmailRequest.password = cipherPassword!!

            joinEmail(joinEmailRequest)

        }
  • 여기서 클라이언트 아이디는 서버도 알고 클라이언트(내 앱)도 아는 공개키이다.
    • 암호화된 키를 서버와 클라이언트가 주고받을 때 각자가 평문으로 바꾸어 해석할 수 있도록하기 위함

→ 암호화를 적용시킨 후 회원가입 기능을 이용하니 다음과 같은 로그를 okHttp를 통해 얻을 수 있었다.

  • password는 잘 암호화된 것을 알 수 있다!
  • 그런데 여전히 400이다.. 자세한 로그를 보기 위해선 서버쪽에서 일어난 에러로그를 찾아야 겠다!

 

서버 쪽 에러로그

  • MethodArgumentNotValidException: Validation failed for argument [0] in public com.umc.cresyn.result.ResultVO
    • 유효성 체크에 통과하지 못했다는 의미.
    • 해당 라인을 더 읽어보면 발견할 수 있는 문구는 다음과 같다.
      • [Field error in object 'userEmailAddReqVO' on field 'name': rejected value [null];
        • name이라는 변수가 null이다. 즉, name변수가 필수적으로 서버로 들어와야하는데 내가 보내주지 않아서 생긴 문제!

→ 이번 기회에 정확히 로그인 기능을 요청하기 위해서는 서버쪽에 어떤 변수들을 필수적으로 보내주어야하는지 체크하는 시간을 가졌다.

 

위 에러가 알려주듯이 userEmailAddReqVO클래스를 찾아보았고, 다음과 같이 필수적인 변수들은 @NotEmpty어노테이션이 달려져있는 것을 볼 수 있다!

→ 이제 클라이언트쪽에서 해당 변수들을 보내줄 수 있도록 다시 UI만들고 데이터 넘겨주는 작업을 실시하면 되겠다!

 

 

느낀 점 🤔

패스워드에 암호화를 해주는 작업이 생각보다는 금방 끝이 났다. 다행!

오늘 서버쪽 에러로그를 보고 서버쪽 소스코드도 볼 수 있는 기회가 주어졌다.

안드로이드 개발자와 서버개발자가 원래는 개별적으로 존재하지만.. 우리 회사에서는 안드로이드 개발자가 서버쪽도 손을 봐야하는 상황이다.

그래서 서버쪽도 내가 이후에 다루어보아야겠다는 생각이 들었다!

서버쪽 코드가 생각보다 재미있어 보였다 😊

 

 


 

제 글이 당신에게 도움이 되었길 바랍니다.

추가적인 질문은 언제든지 환영해요.

 

인상깊게 보셨다면 아래 광고 한 번만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠