문제설명
시도
암호화한 데이터는 body를 통해 전달 받은 email을 가지고 있는 데이터가 바탕이다.
//User는 user라는 schema의 형식을 가진 라이브러리를 할당한 식별자다.
//email은 body를 통해서 전달받은 데이터의 식별자이다.
const user = await User.findOne({ email })
console.log를 통해서 user에 정상적인 데이터가 할당되었음을 확인했다.
이를 바탕으로 jwt.sign()으로 암호화 하였다.
//암호화된 내용은 user의 userId 데이터와 문자열customized-secret-key 자체이다.
const token = jwt.sign({ userId: user.userId }, "customized-secret-key");
//암호화 한 데이터를 cookie데이터로 변환했다.
res.cookie("Authorization", `Bearer ${token}`);
res.status(200).json({ token });
console.log로 확인한 결과 데이터가 정상적으로 암호화가 되었다.
그리고 암호화한 데이터를 사용하기 위해서 token이 정상적으로 발급된 토큰이 맞는지 검증했다.
//authToken은 암호화된 userId 데이터 부분이다.
const { userId } = jwt.verify(authToken, "customized-secret-key");
console.log를 통해서 확인한 결과 authToken은 res.cookie의 userId부분이 암호화된 내용과 똑같이 일치했다.
하지만 userId는 undefined의 결과가 console.log에 찍혔다.
모든 과정에서 데이터는 정상적으로 할당이 되었다.
하지만 암호화된 데이터를 열어보면 undefined가 나왔다.
console.log(jwt.verify(authToken, "customized-secret-key")의 결과는 { iat: 1687335460 } 이런 객체가 나왔다.
객체가 useId에 할당이 되었음에도 useId가 undefined라는 것을 곰곰히 생각했다.
그리고 내가 암호화에 대한 지식이 부족했다는 것을 깨달았다. 왜냐하면 { iat: 1687335460 }이 객체가 무엇을 의미하는지 정확히 몰랐기 때문이다. 그리고 찾아본 결과 { iat: 1687335460 }이 객체는 데이터가 기록되었음 그 자체를 뜻 한다는 것을 알았다.
즉 iat: 1687335460는 하나의 식별자이며 userId의 데이터가 할당되어 있다는 의미라고 볼 수 있다.
해결
어디서 부터 꼬였는지 알았다. 애초에 userId는 undefined가 할당이 되었던 것이다.암호화는 undefined조차 암호화할 수 있다는 것을 알았다. 그래서 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODczMzU0NjB9.rx_fNRo8aNwnTBtTd1ZBE2LGNBy1SlT-nWq이 암호가 user.userId의 데이터라고 착각했던 것이다.즉 user.userId가 undefined라는 의미고 userId란 데이터가 user에는 없었다는 의미다.나는 schema /user를 다시 확인해 보았고 아니나 다를까_id를 userId로 바꾼다는 것이 오탈자가 나서 uerId로 바꿔버린 것이었다.schema 부분을 수정하자 정상적으로 작동되었다.
알게된 점
undefined 또한 암호화가 가능하다.
jwt의 암호화는 암호화 한 데이터와 특정 문자열로 구분이 되어있다.
{ iat: 1687335460 }는 암호화한 데이터의 기록이라 볼 수 있다.
'T.I.L' 카테고리의 다른 글
23-06-27 T.I.L github fork (0) | 2023.06.27 |
---|---|
23-06-26 T.I.L SQL config 암호화 설정 (0) | 2023.06.27 |
23-06-19 T.I.L mongodb 6.0 이상 window에 설치하기 (0) | 2023.06.19 |
23-06-16 T.I.L 프로그래머스 Combination 공식 코드화 하기 (0) | 2023.06.16 |
23-06-14 T.I.L E11000 duplicate key error collection (0) | 2023.06.14 |