본문 바로가기

IT-백엔드

Node.js - JWT

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