스파르타 코딩클럽

[스파르타 코딩클럽] TODO 서버 로그인 기능

딸기토끼0623 2024. 5. 24. 20:47

0. 코드

https://github.com/ddalkyTokky/KotlinSpring_TODO_Backend/tree/deploy_0.0.0

 

1. Spring Security + JWT

처음에는 으레 그러는 것처럼 Spring Security 와 JWT를 결합해서 구현하려 헀다. 하지만 여기에는 치명적인 문제 두 가지가 있었다!!

 

  1. Spring Security 가 짱 어려움.. 사실상 보안공격과 실제 Spring Framwork 단위에서의 작동구조를 알아야 하는데, 그 양이 하루이틀만에 이해하고 사용할 수 있는 양이 아니다..
  2. Spring Security 6.1 부터 deprecated 된 함수가 많아 인터넷 코드의 대부분이 쓸모 없음..

 

결국 직접 유사JWT를 구축하기로 했다.

 

2. sha256

그런데 결국 기본이 되는 sha256은 Spring Secutiry를 사용해서 불러와야 하는 아이러니..

implementation("org.springframework.boot:spring-boot-starter-security")

 

fun sha256(base: String): String {
    try {
        val digest: MessageDigest = MessageDigest.getInstance("SHA-256")
        val hash: ByteArray = digest.digest(base.toByteArray(charset("UTF-8")))
        val hexString = StringBuilder()
        for (i in hash.indices) {
            val hex = Integer.toHexString(0xff and hash[i].toInt())
            if (hex.length == 1) hexString.append('0')
            hexString.append(hex)
        }
        return hexString.toString()
    } catch (ex: Exception) {
        throw RuntimeException(ex)
    }
}

위 함수는 어떤 길이의 String이든, sha256을 사용해 64글자의 랜덤 String을 반환한다.

3. 유사JWT 인증 인가 과정

3-1. 회원가입

3-2. 로그인 확인

3-3. 로그인 확인 후 토큰 제작 및 전달

3-4. 제출 토큰 검증

4. 난이도? 느낀점?

난이도랄게 있나 뭐.. 그냥 JWT를 따라한, 그것도 필수적인 것만 따라한 것이라 어려울건 없었다.

다만 Spring Security를 못 알아낸게 좀 아쉽다.

 

더 공부하자!!