JWT란?
Json Web Token의 약자로 Json 객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안전성 있게 전달해주기 위한 토큰이다.
JWT 구조
1) Header: 사용할 해쉬 알고리즘
2) Payload: 담을 내용
3) Signature: 서명(ID + PASSWORD)
그리고 위 사진처럼 각 파트를 점으로 구분한다.
자 이제 개념을 대충 파악을 했으니 이제 코드를 시작해보쟈.
일단 저번 Crypto 시간에 ID 암호화 복호화하면서 디비에 많은 id password가 저장이 되어있을건데요. 그래서 지금 그걸 다 없애줄 것입니다.
1. 콘솔창에 mongo라고 쳐서 mongodb 서버를 켜준다.
2. show dbs; <- 데이터베이스 리스트 확인
그럼 위 사진처럼 정상적으로 justin이라는 데이터베이스가 있는 것을 알 수 있다.
3. use justin -> db를 justin으로 변경
4. show tables
5. db.users.find()
이렇게 저번 시간에 만들어준 users들이 있는 것들을 볼 수 있다.
6. db.users.remove({}) <- 전체 유저 삭제
위 사진 보면 9개가 Removed 되었다고 나와있고 삭제한 이후로 db.users.find()를 해주면 어떠한 users도 조회가 안되는 것을 알 수 있다.
* 만약 특정한 db안에 있는 user를 삭제하고 싶다면
db.users.remove({ name: 'nero' }) <- 이렇게 안에 특정한 값으로 정의해줘서 삭제해주면 된다.
특정한 user를 생성해보쟈
이건 이전에도 했지만
1. 일단 nodemon server.js로 서버를 돌려줌
2. Postman을 통하여 생성해줄 것이다
그러면 이렇게 정상적으로 생성된 것을 알 수 있다.
auth.js
user.js
Postman 화면
제가 아까 user를 불러오는 것
결과:
ㅏㅣ
아이디
비번
그에 해당하는 내용
이렇게 3개를 잘 불러오는 것을 알 수 있다.
근데 위 결과를 보면 배열 형태로 불러온다. 아니 id와 password가 똑같은 유저는 한명일텐데 배열로 받아올 필요가 있나 싶어서 바꿔줄 것이다.
위 사진을 보면 비밀번호를 틀리게해서 조회를 하였는데 그 때는 Unauthrized가 뜨는 것을 알 수 있고 아래 사진을 보면 정상적으로 user가 확인되는 것을 알 수 있습니다.
user.js
Postman 화면
불러올 때 id, password가 뜨는 것을 알 수 있다. 비록 password가 해시 형태이긴하지만. 그래서 보안상 좋지가 않다. 그러므로 우리는 JWT로 암호화를 시켜줄 것이다.
JWT 다운로드
코드
user.js
결과:
payload 오류가 뜬다. 이래서 나처럼 오류가 뜨는 사람들은 이렇게 해결하면된다.
해결법:
위 코드 let token 부분을 req.user에서 req.user.to.JSON()으로 바꿔준다.
결과:
그럼 정상적으로 JWT로 인하여 암호화 되어서 결과가 나오는 것을 볼 수 있다.
그런데 아직도 문제점이 있다 결과를 보면 1234라는 password까지 딸려오는 것을 볼 수 있다. 그래서 우리는 지금 password는 출력이 안되게 해줄 것이다.
수정 코드:
auth.js
아까전에는 console.log(password)가 있었는데 그 부분을 없애주고
User.findOne 부분에서 doc를 불러올 때 doc에서 password를 출력 안해주기 위해서 조건을 달아주었다. 조건은 password:0
그러면 결과가 이렇게 나오는 것을 알 수 있다.
'IT-백엔드' 카테고리의 다른 글
Node.js - MongoDB (0) | 2024.01.25 |
---|---|
Node.js - Crypto (0) | 2024.01.24 |
Node.js - Path (0) | 2024.01.24 |
Node.js - FS(File System) (0) | 2024.01.24 |
node.js의 개요 (0) | 2024.01.24 |