0. 코드
https://github.com/ddalkyTokky/KotlinSpring_TODO_Backend/tree/deploy_0.0.0
1. Spring Security + JWT
처음에는 으레 그러는 것처럼 Spring Security 와 JWT를 결합해서 구현하려 헀다. 하지만 여기에는 치명적인 문제 두 가지가 있었다!!
- Spring Security 가 짱 어려움.. 사실상 보안공격과 실제 Spring Framwork 단위에서의 작동구조를 알아야 하는데, 그 양이 하루이틀만에 이해하고 사용할 수 있는 양이 아니다..
- 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를 못 알아낸게 좀 아쉽다.
더 공부하자!!
'스파르타 코딩클럽' 카테고리의 다른 글
[스파르타 코딩클럽] TODO 서버 개발 기획 문서 (0) | 2024.05.13 |
---|---|
[스파르타 코딩클럽] 후위연산식과 계산기 (1) | 2024.04.25 |